Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实现混合加密?_C#_Asp.net_Encryption Symmetric_Encryption Asymmetric_Hybrid - Fatal编程技术网

C# 实现混合加密?

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

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

非对称加密:

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应用程序是不够的。