首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加解密错误

加解密错误
EN

Stack Overflow用户
提问于 2014-12-09 17:07:22
回答 2查看 452关注 0票数 0

我有一个非常简单的加密和解密代码。但是,当我加密解密时,输出并不是我最初输入的输出。

这是加密:

代码语言:javascript
运行
复制
static byte[] Encrypt(SymmetricAlgorithm aesAlg, string plainText)
    {
        ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

        using (MemoryStream msEncrypt = new MemoryStream())
        {
            using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
            {
                using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                {
                    swEncrypt.Write(plainText);
                }
                return msEncrypt.ToArray();
            }
        }
    }

解密:

代码语言:javascript
运行
复制
static string Decrypt(SymmetricAlgorithm aesAlg, byte[] cipherText)
    {
        ICryptoTransform decryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

        using (MemoryStream msDecrypt = new MemoryStream(cipherText))
        {
            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
            {
                using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                {
                    return srDecrypt.ReadToEnd();
                }
            }
        }
    }

Main:

代码语言:javascript
运行
复制
public static void Main()
    {
        string original = "My secret data!";

        using (SymmetricAlgorithm symmetricAlgorithm = new AesManaged())
        {
            byte[] encrypted = Encrypt(symmetricAlgorithm, original);
            string roundtrip = Decrypt(symmetricAlgorithm, encrypted);

            Console.WriteLine("Original: {0}", original);
            Console.WriteLine("RoundTrip: {0}", roundtrip);
        }
    }

产出应是:

代码语言:javascript
运行
复制
Original: My secret data!
RoundTrip: My secret data!

然而,它的结果是:

代码语言:javascript
运行
复制
Original: My secret data!
RoundTrip: ">�����6dB&JD䮦�L�ܹ�SKo\v*.�"

或者其他类似的有趣的事情。

我在网上找不到任何有用的东西。如有任何建议,将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-09 17:31:34

问题在于,在您的Decrypt方法中,您创建了另一个加密器,而不是Decryptor

如果你改变了路线

代码语言:javascript
运行
复制
aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);

代码语言:javascript
运行
复制
aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

然后你会得到被欺骗的文本。

票数 1
EN

Stack Overflow用户

发布于 2014-12-09 17:36:42

解密码

代码语言:javascript
运行
复制
static string Decrypt(SymmetricAlgorithm aesAlg, byte[] cipherText)
{
    ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

    using (MemoryStream msDecrypt = new MemoryStream(cipherText))
    {
        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
        {
            using (StreamReader srDecrypt = new StreamReader(csDecrypt))
            {
                return srDecrypt.ReadToEnd();
            }
        }
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27384674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档