实现混合加密

本文关键字:加密 混合 实现 | 更新日期: 2023-09-27 18:04:56

我已经在MVC c#应用程序中实现了一个非对称算法,但是我想修改加密方法,以便我使用对称和非对称加密(又名混合加密)。知道我该怎么做吗?

不对称加密:

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中的System.Security.Cryptography名称空间已经提供了大量经过严格审查的加密功能。不要尝试使用您自己的不对称函数来完成此操作。

如果你想通过公钥加密进行私钥分发,你应该使用RSAPKCS1KeyExchangeFormatter或者RSAOAEPKeyExchangeFormatter如果你有支持pkcs# 1v2的灵活性

我建议阅读SSL或OpenPGP是如何实现的。

我不知道你在纠结哪一部分。

简而言之,非对称算法用于对称密钥交换。

对称算法用于批量数据(流/块)加密。你不能简单地修改你的两个函数,你需要实现握手和密钥交换。

因为你有一个MVC。. NET应用程序,您可以将其托管在web服务器中并获得HTTPS/SSL传输。您也可以对WCF执行相同的操作。为什么不使用底层传输提供的内容?你甚至可以配置你的应用程序(web.config)来要求客户端证书。

PS:我同意不要重新发明轮子,即使是埃里克链接到的微软的文章也提供了一个警告。

注意我们建议您不要尝试从所提供的基本功能创建您自己的密钥交换方法,因为为了成功进行密钥交换,必须仔细执行该操作的许多细节。