【发布时间】:2014-06-29 11:02:13
【问题描述】:
我正在使用证书来加密我在 WCF 和 Android 之间的通信。使用公钥加密,使用私钥解密工作正常。但是我从 WCF 应用程序返回一个会话 ID 到 Android 客户端。现在,我需要使用我的私钥加密 SessionID 并使用公钥(反向)在客户端加密。这种反向加密和解密在 Android 测试中运行良好。但在我的 C# 测试中,解密显示错误“密钥不存在”。我尝试将编码更改为所有可能的编码,但没有希望。这是代码。
private void Encrypt()
{
X509Certificate2 myCert2 = null;
myCert2 = new X509Certificate2(Resource1.code, "code");
RSACryptoServiceProvider RSA = (RSACryptoServiceProvider)myCert2.PrivateKey;
string strtt = "This is a test";
byte[] ascenc = Encoding.UTF32.GetBytes(strtt);
encrbyte = RSA.Encrypt(ascenc, false);
encrypted_string =Convert.ToBase64String(encrbyte);
textBox2.Text = encrypted_string;
}
private void Decrypt()
{
var myCert2 = new X509Certificate2(Resource1.code, "code");
RSACryptoServiceProvider RSA = (RSACryptoServiceProvider)myCert2.PublicKey.Key;
byte[] ascby = Convert.FromBase64String(encrypted_string);
byte[] decrypted_byte = RSA.Decrypt(ascby, false);
string decrypted_text = Encoding.UTF32.GetString(decrypted_byte);
textBox3.Text = decrypted_text;
}
【问题讨论】:
-
请显示你得到的真正错误,以及它适用于哪一行。
-
RSA.Decrypt(ascby, false);显示“密钥不存在”
-
没有 RSA 反向加密这种东西。您应该使用公钥加密并使用私钥解密。如果您确实需要(但为什么),您应该查看带有(部分)消息恢复的签名。但其中许多方案已被弃用。
标签: c# encryption encoding rsa x509certificate