1
請問,我在做什麼壞,下面的java和bash的結果不匹配?由java和openssl簽名不匹配
這裏是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
猛砸代碼:
printf $(printf "${string_to_sign}" | openssl rsautl -sign -inkey "${pem_path}" | openssl enc -base64 | awk '{printf "%s", $0}')
您是否嘗試過'「SHA1withRSA」',而不僅僅是'「RSA」'? RSA本身不是一個簽名算法(或者一個不安全的,最基本的算法)。通常還需要指定填充模式(「SHA1withRSA」'中的PKCS#1 v1.5)和散列算法。 –
感謝您的評論,但使用「RSA」或「SHA1WithRSA」的結果是相同的 - 與openssl相比仍然不同。 :-( – petasick
我把我的評論回來!!!我改變了簽名的原則,現在我使用''RSA/None/PKCS1Padding''用'javax.crypto.Cipher'填充,它終於可以工作了!很多這個踢! – petasick