Python和C#密码学:Whati';I’我做错了
本文关键字:错了 密码学 Whati Python | 更新日期: 2023-09-27 18:21:06
我需要在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#的大师们能帮我吗?
您正在将encryption
密文写成文本。相反,您应该在python中以二进制模式打开文件。然后在C#中,你可以做同样的事情,但方法相反。在这里,您应该返回字节而不是字符串作为密文。
如果你想使用文本模式而不是二进制模式,那么你可以使用base64编码/解码。