C# 混合密码系统在.net中的实现。错误指定的密钥不是此算法的有效大小

C# 混合密码系统在.net中的实现。错误指定的密钥不是此算法的有效大小,c#,cryptography,encryption-symmetric,hybrid,encryption-asymmetric,C#,Cryptography,Encryption Symmetric,Hybrid,Encryption Asymmetric,我正在尝试实现中提到的混合密码系统 目前,我已经实现了以下算法 private void button1_Click(object sender, EventArgs e) { CspParameters cspParams = new CspParameters { ProviderType = 1 }; RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProv

我正在尝试实现中提到的混合密码系统

目前,我已经实现了以下算法

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;
        }

但是获取错误指定的密钥不是此算法的有效大小。加密对称密钥时

您正试图使用RSA公钥使用不安全的DES算法进行加密。这总是会失败,DecryptoServiceProvider不接受RSA密钥。你需要一个服务提供商


您可能想考虑使用已经实现混合密码PGP、CMS或专有协议之一的特定库。您的解决方案最终可能会运行,但不会安全。

您的公钥大于此加密方法所允许的64位。这就是为什么会出现异常。它是200字节,即1600位。这有点正确,但使用RSA包装DES密钥时使用了错误的算法/密钥组合这一事实是根本错误。回滚到上一版本。这是一个问答网站,不是调试网站。不要使用partial solutions.DES作为密码更新代码。你能建议在当前的实施中进行修正吗。在github e.t.c上找不到任何关于混合密码的东西。我认为这很明显,但我已经调整了答案。除非严格要求,否则不要对字节进行字符串化。字符串对于人类可读的文本很好;无需一直将所有内容转换为字符串并返回。DES密钥应该编码为字节。注意,加密世界有一件事是不同的:目标是使其安全,而不是使其工作。如果您运气不好且不安全,那么您可以拥有一个在大多数情况下都像魔咒一样工作的实现。你需要知道你正在做什么来开发加密。请发布一个新的问题,包括代码。不要更新这个。请至少接受或投票支持这个答案。