C# 实现混合加密?
我已经在MVC应用程序中实现了一个非对称算法,但是我想修改加密方法,以便同时使用对称和非对称加密(也称为混合加密)。你知道我该怎么做吗 非对称加密:C# 实现混合加密?,c#,asp.net,encryption-symmetric,encryption-asymmetric,hybrid,C#,Asp.net,Encryption Symmetric,Encryption Asymmetric,Hybrid,我已经在MVC应用程序中实现了一个非对称算法,但是我想修改加密方法,以便同时使用对称和非对称加密(也称为混合加密)。你知道我该怎么做吗 非对称加密: public string AsymmEncrypt(int accId, string input, string publickey) { Account a = new UserRepository().GetAccountById(accId); RSACryptoServiceProvider my
public string AsymmEncrypt(int accId, string input, string publickey)
{
Account a = new UserRepository().GetAccountById(accId);
RSACryptoServiceProvider myAlg = new RSACryptoServiceProvider();
CspParameters cspParams = new CspParameters();
publickey = new UserRepository().PublicKeyByAccountId(accId);
cspParams.KeyContainerName = publickey;
myAlg = new RSACryptoServiceProvider(cspParams);
byte[] cipher = myAlg.Encrypt(UTF8Encoding.UTF8.GetBytes(input), true);
return Convert.ToBase64String(cipher);
}
非对称解密:
public string AsymmDecrypt(int accId, string input, string privatekey)
{
Account a = new UserRepository().GetAccountById(accId);
RSACryptoServiceProvider myAlg = new RSACryptoServiceProvider();
CspParameters cspParams = new CspParameters();
privatekey = new UserRepository().PrivateKeyByAccountId(accId);
byte[] cipher = myAlg.Decrypt(Convert.FromBase64String(input), true);
return UTF8Encoding.UTF8.GetString(cipher);
}
你可能不应该在这里尝试重新发明轮子。.net alrady中的System.Security.Cryptography命名空间提供了大量经过充分审查的加密功能。不要试图使用自己的非对称函数来实现这一点
如果您想通过公钥加密进行私钥分发,您应该使用类似的方法,或者即使您有支持PKCS的灵活性,也可以使用类似的方法。我建议您阅读SSL或OpenPGP是如何实现的 我不知道你在挣扎什么 简而言之,非对称算法用于对称密钥交换 对称算法用于批量数据(流/块)加密。简单地修改这两个函数是无法完成的,您需要实现握手和密钥交换 因为您有一个MVC.NET应用程序,所以您可以将其托管在web服务器中并获得HTTPS/SSL传输。您也可以对WCF执行相同的操作。为什么不使用底层传输提供的内容?您甚至可以将应用程序(web.config)配置为需要客户端证书 附言:我同意不要重新发明轮子,甚至Erik链接的微软文章也对此提出了警告 警告:我们建议您不要尝试根据提供的基本功能创建自己的密钥交换方法,因为必须小心执行操作的许多细节,才能成功地进行密钥交换
您的意思是要将其用于对称密钥分发吗?通常,您会对大量数据使用对称加密,因为它速度更快,然后对对称密钥进行非对称加密以进行分发。当您在https URL上运行对称密钥时,专家会对其进行混合加密。MSDN文档中有一个使用RSA和AES的示例。也许你应该解释一下你想用你的自定义方法加密什么,以及为什么在HTTPS中托管你的MVC应用程序是不够的。