通过java和openssl签名不匹配

时间:2014-03-19 02:57:24

标签: java openssl rsa bouncycastle sign

请问,以下java和bash的结果不匹配,我做得怎么样?

这是similar topic。我能够轻松编写java(实际上在那里讨论过),但没有人关心结果。简而言之,两个结果都不同。

这是我使用的java的一部分(pem文件没有密码):

Security.addProvider(new BouncyCastleProvider());
PEMParser pemParser = new PEMParser(new BufferedReader(new FileReader(pemPath)));
Object object = pemParser.readObject();

JcaPEMKeyConverter converter = new JcaPEMKeyConverter();
KeyPair kp = converter.getKeyPair((PEMKeyPair) object);
PrivateKey privateKey = kp.getPrivate();

Signature sig = Signature.getInstance("RSA");
sig.initSign(privateKey);
sig.update(stringToSign.getBytes());

byte[] bytes = sig.sign();
return new String(Base64.encode(bytes)); //+ close pemParser

Bash代码是:

printf $(printf "${string_to_sign}" | openssl rsautl -sign -inkey "${pem_path}" | openssl enc -base64 | awk '{printf "%s", $0}' )

1 个答案:

答案 0 :(得分:0)

可能为时已晚,如果我看了http://www.openssl.org/docs/apps/rsautl.html

  

rsautl因为它直接使用RSA算法只能用于签名或验证小块数据。

所以它没有摘要就做了原始签名,所以我认为你应该使用NONEwithRSA(见http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html