我想用Java生成一个RSA-SHA256签名,但我不能让它在控制台上生成与OpenSSL相同的签名.
这就是我对OpenSSL所做的事情(遵循本教程):
生成密钥对:
openssl genrsa -out private.pem 1024
Run Code Online (Sandbox Code Playgroud)
提取公钥:
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
Run Code Online (Sandbox Code Playgroud)
创建数据哈希:
echo 'data to sign' > data.txt
openssl dgst -sha256 < data.txt > hash
Run Code Online (Sandbox Code Playgroud)
生成的哈希文件以(stdin)=我手工删除的内容开头(首先忘了提及它,谢谢马塔).
签名哈希:
openssl rsautl -sign -inkey private.pem -keyform PEM -in hash > signature
Run Code Online (Sandbox Code Playgroud)
要在Java中重现结果,我首先将私钥从PEM转换为DER:
openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -nocrypt > private.der
Run Code Online (Sandbox Code Playgroud)
现在我编写了这个Java类来生成相同的签名:
public class RSATest {
public static void main(String[] args) throws IOException,
NoSuchAlgorithmException, InvalidKeySpecException,
InvalidKeyException, SignatureException {
byte[] …Run Code Online (Sandbox Code Playgroud)