2009-11-24 21 views
3

我試圖加密一個字符串從Java到Python,使用庫Bouncy Castle J2ME在客戶端和Python M2Crypto在另一端。Java到Python RSA

一切都很好,我可以正確解密,但填充是問題。

的M2Crypto LIB給我(據我可以告訴)只有這些填充方案: no_padding = 3 pkcs1_padding = 1 sslv23_padding = 2 pkcs1_oaep_padding = 4

雖然充氣城堡J2ME僅規定: NoPadding OAEPWithAndPadding PKCS5Padding SSL3Padding

所以,我可以用NoPadding在兩者之間,但隨後即得到解密後生成的字符串都充滿了混亂的字符秒。

我真的很想弄清楚填充,但我不知道如何在填充方案之間進行轉換/如果這甚至是可能的。

請幫我解決這個問題,這真讓我傷心!

回答

1

我不熟悉的充氣城堡,但我猜你以某種方式使用RSAEngine它實現AsymmetricBlockCipher因此,你應該能夠使用PKCS1與否?

而且在那裏似乎也有OAEP的支持,它給出了正確的參數也應該有效。

+1

我想我是。經過幾個小時的絕望之後,我發佈了這篇文章,看看這是一件相當簡單的事情。 事實證明,如果我用「BC」提供程序使用字符串「RSA/ECB/PKCS1Padding」,它可以通過python使用PKCS1讀取。歐洲央行是必需的,否則到處都是垃圾人物。 此外,我必須確保密鑰採用DER格式,並使用X509EncodedKeySpec讀取它以便讀取。 DER = PEM減去標題(---- BEGIN ...),並對base64進行解碼。 – 2009-11-24 18:16:52

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; 
} 

該函數將返回一個RSA發動機PKCS1Encoding。