【发布时间】:2017-06-24 12:55:14
【问题描述】:
我正在尝试实现https://en.wikipedia.org/wiki/Hybrid_cryptosystem中提到的混合密码系统
目前我已经实现了以下算法
private void button1_Click(object sender, EventArgs e)
{
CspParameters cspParams = new CspParameters { ProviderType = 1 };
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024, cspParams);
string publicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false));
string privateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true));
string symmericKey = "Kamran12";
txtEncryptedData.Text = EncryptData(txtInputData.Text, symmericKey);
string encryptedsymmetrickey = EncryptData(symmericKey, publicKey); //error line
//string decryptsymmetrickey = encryptedsymmetrickey + privateKey;
//string decrypteddata = encryptedData + decryptsymmetrickey;
}
public string EncryptData(string data, string key)
{
string encryptedData = null;
byte[] buffer = Encoding.UTF8.GetBytes(data);
DESCryptoServiceProvider desCryptSrvckey = new DESCryptoServiceProvider
{
Key = new UTF8Encoding().GetBytes(key)
};
desCryptSrvckey.IV = desCryptSrvckey.Key;
using (MemoryStream stmCipherText = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(stmCipherText, desCryptSrvckey.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(buffer, 0, buffer.Length);
cs.FlushFinalBlock();
encryptedData = Encoding.UTF8.GetString(stmCipherText.ToArray());
}
}
return encryptedData;
}
但收到错误指定的密钥不是该算法的有效大小。在加密对称密钥时
【问题讨论】:
-
您的
publicKey大于此加密方法所允许的 64 位。这就是你得到异常的原因。它是 200 字节,即 1600 位。 -
确实如此,但使用错误的算法/密钥组合使用 RSA“包装”DES 密钥这一事实是潜在的错误。
-
回滚到上一个版本。这是一个问答网站,不是调试网站。不要使用(部分)解决方案更新您的代码。
标签: c# cryptography encryption-symmetric hybrid encryption-asymmetric