1
所以,在C#我有以下代碼:如何在Python中實現C#RSACryptoServiceProvider-like加密?
public static void Main (string[] args)
{
publicKeyXml = "<Modulus>mFCubVhPGG+euHuVQbNObqod/Ji0kRe+oh2OCFR7aV09xYiOklqFQ8jgIgAHvyCcM1JowqfFeJ5jV9up0Lh0eIiv3FPRu14aQS35kMdBLMebSW2DNBkfVsOF3l498WWQS9/THIqIaxbqwRDUxba5btBLTN0/A2y6WWiXl05Xu1c=</Modulus><Exponent>AQAB</Exponent>";
RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();
rSACryptoServiceProvider.FromXmlString (publicKeyXml);
Console.WriteLine(Convert.ToBase64String (rSACryptoServiceProvider.Encrypt (Encoding.ASCII.GetBytes(args[0]), false)));
}
,當我用它來加密信息,它的工作原理遠程服務器(而我有沒有源代碼)就好了。但是,當試圖用PyCrypto在Python中做類似的事情時,遠程服務器不能解密。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
KEY = RSA.importKey(open('login.key').read()) # Converted to standard format
KEY_CIPHER = PKCS1_v1_5.new(KEY)
testmsg = KEY_CIPHER.encrypt("test msg").encode('base64').replace('\n', '')
# send testmsg down a socket
# Response: {"info":"java.lang.IllegalArgumentException: Could not decrypt.","msg":"Fail"}
有關爲什麼會出現這種情況的任何想法?
什麼樣的格式呢login.key有哪些?乍一看,簽名方案看起來完全相同* ...密鑰的格式(以及可能的值)可能不同。 –
在這種情況下,我嘗試了兩種不同的方法。其一,我發現了一個使用BouncyCastle將XML Pubkey轉換爲XML的工具。另一個解決方案是我用q和e使用PyCrypto的構造。這些都沒有奏效。 – user2657699
經過進一步調查,我偶然發現了http://stackoverflow.com/questions/3260319/interoperability-between-rsacryptoserviceprovider-and-openssl,指出我的解決方案爲什麼不起作用的差異。然而,這只是簽名,而不是加密,但也許會導致相同的不兼容性? – user2657699