내 서버가 파이썬으로 코딩되어 있으며이 서버에 대한 Java 클라이언트를 만들고 있습니다. 지금은 Base64.encodeBase64를 사용하여이 서명을 인코딩 때문에 형성된 BYTEARRAY (이름 my_byte_array)을 변환하고, 이것은 BYTEARRAY (이름 signed_data)를 반환Java Python 메시지 서명 및 확인
public static byte[] Sign(PrivateKey privateKey, byte[] data) throws Exception{
System.out.println("Signing the key inside RSACrypto#Sign");
Signature dsa = Signature.getInstance("SHA1withRSA");
SecureRandom secureRandom =null;
dsa.initSign(privateKey,secureRandom);
dsa.update(data);
return dsa.sign();
}
:
내가 사용하여 메시지 (데이터)에 서명하고
String str = new String(my_byte_array)
문자열을 서버로 보내는 것.
서버 측에, 나는이 문자열을 수신 한 다음 서버를 사용하여 서명을 확인 : 나는 그들이 동일 양쪽에 my_byte_array 인쇄하려고, 그래서 때 라이브러리 http://gdata-python-client.googlecode.com/hg/pydocs/gdata.Crypto.PublicKey.RSA.html
를 사용
publicKey.verify(str(data), (long(base64.b64decode(my_byte_array)),))
signed_data 및 base64.b64decode (my_byte_array)
그러나 나는이 오류가 무엇입니까 :
ValueError: invalid literal for long() with base 10: '\x8b\xa1\xbb\x19fO\xea\xe7\xa4B\xd4\xd2\xa1\xe3\xb9\xd0\x89n\xa2\xfe\xb5\xedsL\x02\xba\xad\x12!qjp\x0c%+Z\t\xa7\x12\x08\x90\xfaTk\xca\xd0\xae\xd8\xa9\xfa\xbb]>9\x1c\x80\xd0
,536을
자바가 메시지를 바이트로 서명하고 파이썬이 메시지를 Long에 넣기를 기대하기 때문에이 오류가 발생합니다.
이 문제를 해결할 방법이 있습니까?
Java 및 Python 측 모두에서 NoPadding을 사용하여이를 수행 할 수있는 방법이 있습니까? – d34th4ck3r
@ d34th4ck3r 방법이 있지만 패딩은 RSA 서명을 안전하게 만드는 요소이므로 항상 사용해야합니다. – SquareRootOfTwentyThree
고마워요.하지만 당신의 방법을 시도 할 때, 검증은 항상 거짓으로 이어집니다. (여기에 내 코드가 있습니다 : https://gist.github.com/3036062 – d34th4ck3r