2014-03-19 4 views
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}') 
+1

당신이 봤어 "SHA1withRSA와"를 (http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html 참조)'대신 당신이 NONEwithRSA를 사용한다고 생각 하는가? RSA는 그 자체로 서명 알고리즘 (또는 안전하지 않은, 기껏해야 기초적인 것이 아닙니다)입니다. 일반적으로, 패딩 모드 (''SHA1withRSA ''의 PKCS # 1 v1.5)와 해시 알고리즘을 특정 할 필요가 있습니다. –

+0

주석을 주셔서 감사하지만 "RSA"또는 ""SHA1WithRSA ""를 사용하는 결과는 동일하며 여전히 openssl과 다릅니다. :-( – petasick

+0

나는 내 의견을 다시 듣고있다. 나는 서명의 원칙을 바꾸었고 지금은''RSA/None/PKCS1Padding ''패딩을'javax.crypto.Cipher'와 함께 사용한다. – petasick

답변

0

너무 늦게하지만 난 읽으면 http://www.openssl.org/docs/apps/rsautl.html

rsautl은 RSA 알고리즘을 직접 사용하기 때문에 작은 데이터 조각을 서명하거나 확인할 때만 사용할 수 있습니다.

는 그래서 다이제스트없는 원시 서명 그래서 나는`` "RSA"을`

관련 문제