2009-11-24 2 views
3

나는 Java에서 Python으로 문자열을 암호화하려고하는데, 클라이언트 측에서 Bouncy Castle J2ME 라이브러리를 사용하고 다른 쪽에서는 Python M2Crypto를 사용한다.Java to Python RSA

모든 것이 꽤 좋지만 제대로 해독 할 수 있지만 패딩이 문제입니다.

M2Crypto lib 디렉토리가 (지금까지 내가 말할 수있는) 만이 패딩 제도 나 제공 : no_padding = 3 pkcs1_padding = 1 sslv23_padding = 2 pkcs1_oaep_padding = 4

탄력이 성 J2ME 만 제공하는 반면 : NoPadding OAEPWithAndPadding PKCS5Padding에 SSL3Padding

그래서, 난 둘 사이에 NoPadding을 사용할 수 있지만, 다음 암호 해독 후에 생성받을 문자열은 뒤죽박죽 문자로 가득 에스.

패딩을 정렬하고 싶습니다. 패딩 방식간에 변환하는 방법을 알고 있습니다./가능하더라도 가능합니다.

나를 알아내는 데 도움주세요, 나를 죽이고 있습니다!

답변

1

나는 Bouncy Castle에 익숙하지 않지만 어떻게 든 RSAEngine을 사용하여 AsymmetricBlockCipher을 구현하므로 PKCS1을 사용할 수 있습니까?

또한 적절한 매개 변수가 주어진다면 OAEP 지원이있는 것으로 보입니다.

+1

내가 그런 것 같아. 필사적으로 시간을 새기고 난 뒤에이 글을 올렸습니다. "BC"공급자와 함께 "RSA/ECB/PKCS1Padding"문자열을 사용하면 PKCS1을 사용하여 Python으로 읽을 수 있습니다. ECB가 필요합니다. 그렇지 않으면 어디서나 쓰레기 문자가 있습니다. 또한 키가 DER 형식인지 확인하고 읽으려면 X509EncodedKeySpec으로 읽어야했습니다. DER = PEM에서 헤더 빼기 (---- BEGIN ...), base64가 해독됩니다. –

2

바운시 성은 패딩을 제공합니다. 당신이 PKCS1 패딩과 RSA를 만들기 위해 예를 들어 원하는 경우에 당신은이 작업을 수행해야한다 :

public static PKCS1Encoding create_rsa_public(RSAKeyParameters PublicKey){ 
    RSAEngine engine=new RSAEngine(); 
    PKCS1Encoding encrypto=new PKCS1Encoding(engine); 
    encrypto.init(true,PublicKey); 
    return encrypto; 
} 

그 기능이 PKCS1Encoding가 포함 된 RSA 엔진을 반환합니다.