请问,以下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}' )
答案 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)