Python和C#Cryptography:我做错了什么?

时间:2013-07-05 14:54:14

标签: c# python cryptography rsa m2crypto

我需要在python中加密文本并在C#中解密。在python中,我有这段代码:

我在Python中有这个代码:

def genKey():
    rsa = RSA.gen_key(2048, 65537)
    rsa.save_key('c:/temp/priv-key.pem', callback=passwordCallback)
    rsa.save_pub_key('c:/temp/pub-key.pem')

def encrypt():
    varkey = readkey('c:/temp/pub-key.pem')
    bio = BIO.MemoryBuffer(varkey)
    rsa = RSA.load_pub_key_bio(bio)

    encrypted = rsa.public_encrypt('My Text Here.', RSA.pkcs1_oaep_padding)

    f = open("c:/temp/cript.txt", "w")
    f.write(encrypted)
    f.close()

此代码使用M2Crypto。

就像我说的,我想要解密在C#中生成的结果。以下是我的代码:

static void Main(string[] args)
{
    string text = GetText();
    System.Text.ASCIIEncoding  encoding=new System.Text.ASCIIEncoding();
    Byte[] payload = encoding.GetBytes(text);

    byte[] b = System.IO.File.ReadAllBytes(@"C:\temp\priv-key.pem");
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();

    OpenSSL.Core.BIO bio = new OpenSSL.Core.BIO(b);
    OpenSSL.Crypto.CryptoKey key = OpenSSL.Crypto.CryptoKey.FromPrivateKey(bio, "mypassword");
    RSA rsa = key.GetRSA();
    byte[] result = rsa.PrivateDecrypt(payload, RSA.Padding.OAEP);
}

问题在于这一行:

byte[] result = rsa.PrivateDecrypt(payload, RSA.Padding.OAEP);

执行时,会发生此错误:

error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error
error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed

密码学和C#的大师可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您正在将encryption密文写为文本。相反,你应该在python中以二进制模式打开你的文件。然后在C#中你做同样的事情,但反过来说。在这里你应该返回字节而不是字符串作为密文。

如果您想使用文本模式而不是二进制模式,那么您可以使用base 64编码/解码。