【发布时间】:2017-05-08 06:06:34
【问题描述】:
我正在尝试使用 PKCS1 v2.0 填充在 RSA+SHA1 中签名和验证签名。 我没有在文档(JDK 或 JCE)中找到我必须使用的算法/填充。 看来我必须使用 OAEP 填充但我没有成功:
为了验证,我已经在 DECRYPT_MODE 中使用签名者发送的公钥通过 Cipher 进行了尝试:
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA1ANDMGF1PADDING", "SunJCE");
cipher.init(Cipher.DECRYPT_MODE, pub); //exception !
但我遇到了一个例外:
java.security.InvalidKeyException: OAEP cannot be used to sign or verify signatures
at com.sun.crypto.provider.RSACipher.init(RSACipher.java:303)
at com.sun.crypto.provider.RSACipher.engineInit(RSACipher.java:207)
...
(由于未知原因,OAEPWITHSHA1ANDMGF1PADDING 只接受 ENCRYPT_MODE+PUBLIC KEY 或 DECRYPT_MODE+PRIVATE KEY,我想做的相反......)
对于签名,我正在尝试使用 Signature 但我不知道要使用哪种算法:
Signature mySig2 = Signature.getInstance("SHA1withRSAandMGF1");
没用:
java.security.NoSuchAlgorithmException: SHA1withRSAandMGF1 Signature not available
at java.security.Signature.getInstance(Signature.java:229)
...
有人可以帮帮我吗?
【问题讨论】:
-
您在这里谈论的是 RSA-PSS,它相当于签名的 OAEP。
-
Signature.getInstance("SHA1withRSAandMGF1")似乎可以从 BouncyCastle 获得。 -
好的,谢谢,我会寻找 RSA-PSS。
标签: java rsa digital-signature jce