【问题标题】:C# encryption method doesn't workC# 加密方法不起作用
【发布时间】:2012-01-03 06:58:27
【问题描述】:

这是一种方法,用于加密文本并返回密文:

public static string Encrypt(this string clearText, CryptologyMethod method)
{
    ICryptoTransform cryptoTransform = null;
    switch (method)
    {
        case CryptologyMethod.TripleDes:
            cryptoTransform = new TripleDESCryptoServiceProvider().CreateEncryptor(Config.TripleDesKey, Config.TripleDesIV);
            break;
        case CryptologyMethod.AES:
            cryptoTransform = new AesCryptoServiceProvider().CreateEncryptor(Config.AesKey, Config.AesIV);
            break;
    }
    using (MemoryStream memoryStream = new MemoryStream())
    {
        using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write))
        {
            using (StreamWriter streamWriter = new StreamWriter(cryptoStream))
            {
                streamWriter.Write(clearText);
                cryptoStream.FlushFinalBlock();
                return memoryStream.Text();
            }
        }
    }
}

public enum CryptologyMethod
{
    TripleDes,
    AES
}

Text() 是一个扩展方法,用于读取流的内容:

public static string Text(this Stream stream)
{
    return new StreamReader(stream).ReadToEnd();
}

另外,Config.TripleDesKey 和其他属性返回从配置文件读取的字节数组。

问题是当我使用这个扩展方法时,结果总是一个空字符串:

string cipherText = "一些明文".Encrypt(CryptologyMethod.TripleDes); // 密文为空

【问题讨论】:

  • 我没有投反对票 - 但是:到底是什么问题?编译器错误? “错误”加密?
  • 对于拥有近 5k 代表的人,您不知道如何提出问题。错误是什么,输入是什么,预期输出是什么?您是否意识到在填充后需要重置您的流位置?
  • 大家,很抱歉,我更新了问题。感谢重新打开这个问题。 :)

标签: c# .net security cryptography


【解决方案1】:

我想我以前也遇到过这个问题,一旦我弄清楚了,解决方案就很明显了,而且在此之前完全不透明。

问题在于 ReadToEnd 是相对的,如“从当前位置到结束”。问题是“当前位置”已经“结束”,因为我刚刚完成了对流末尾的写入。所以我会这样解决你的问题:

public static string Text(this Stream stream)
{
    stream.Position = 0
    return new StreamReader(stream).ReadToEnd();
}

帮我解决了类似的问题,希望对您有所帮助。

【讨论】:

  • 为什么它会在钻石上产生一些? 标记?此外,当我想用​​相同的密钥解密它时,它会说 要解密的数据长度无效
  • 这听起来像是一个完全不同的问题。这是否意味着您现在已经修复了流处理?
猜你喜欢
  • 2019-01-23
  • 2021-09-30
  • 2016-05-19
  • 2018-10-06
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多