1
다음 자바 및 bash의 결과가 일치하지 않는 것은 무엇입니까?java 및 openssl에 의한 서명이 일치하지 않습니다
여기는 similar topic입니다. 나는 자바 (실제로 거기에서 논의된다)를 쉽게 작성할 수 있었지만, 아무도 그 결과를 염려하지 않았다. 나에게 간단히 말해서, 두 결과가 다르다.
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
배쉬 코드는 다음과 같습니다 : 여기
내가 사용하는 자바의 일부 (PEM 파일은 암호없이) 아마printf $(printf "${string_to_sign}" | openssl rsautl -sign -inkey "${pem_path}" | openssl enc -base64 | awk '{printf "%s", $0}')
당신이 봤어 "SHA1withRSA와"를 (http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html 참조)'대신 당신이
NONEwithRSA
를 사용한다고 생각 하는가? RSA는 그 자체로 서명 알고리즘 (또는 안전하지 않은, 기껏해야 기초적인 것이 아닙니다)입니다. 일반적으로, 패딩 모드 (''SHA1withRSA ''의 PKCS # 1 v1.5)와 해시 알고리즘을 특정 할 필요가 있습니다. –주석을 주셔서 감사하지만 "RSA"또는 ""SHA1WithRSA ""를 사용하는 결과는 동일하며 여전히 openssl과 다릅니다. :-( – petasick
나는 내 의견을 다시 듣고있다. 나는 서명의 원칙을 바꾸었고 지금은''RSA/None/PKCS1Padding ''패딩을'javax.crypto.Cipher'와 함께 사용한다. – petasick