我已经在MVC C#应用程序中实现了非对称算法,但是我想修改加密方法,以便我使用对称和非对称加密(AKA混合加密)。知道我怎么能这样做吗?
非对称加密:
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);
}
答案 0 :(得分:0)
你可能不应该尝试在这里重新发明轮子。 .net alrady中的System.Security.Cryptography命名空间提供了大量的加密功能,经过了很好的审查。不要试图使用自己的非对称函数来实现这一目标。
如果您想通过公钥加密进行私钥分发,如果您有灵活支持PKCS#1v2,则应使用RSAPKCS1KeyExchangeFormatter或甚至RSAOAEPKeyExchangeFormatter之类的内容
答案 1 :(得分:0)
我建议阅读如何实施SSL或OpenPGP。
我不确定你正在努力的部分。
简而言之,非对称算法用于对称密钥交换。
对称算法用于批量数据(流/块)加密。您只需修改2个函数就无法完成任务,您需要实现握手和密钥交换。
由于您有一个MVC.NET应用程序,您可以在Web服务器中托管它并获得HTTPS / SSL传输。您也可以使用WCF执行相同的操作。有什么理由不使用底层传输提供的东西?您甚至可以将应用程序(web.config)配置为需要客户端证书。
PS:我同意不重新发明轮子,即使是Erik链接的微软文章也提供了警告。注意我们建议您不要尝试从提供的基本功能创建自己的密钥交换方法,因为必须仔细执行操作的许多细节才能使密钥交换成功。