Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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#_.net_Security_Cryptography - Fatal编程技术网

C#加密方法不';行不通

C#加密方法不';行不通,c#,.net,security,cryptography,C#,.net,Security,Cryptography,这是一种加密文本并返回密码文本的方法: public static string Encrypt(this string clearText, CryptologyMethod method) { ICryptoTransform cryptoTransform = null; switch (method) { case CryptologyMethod.TripleDes: cryptoTransform = new Tripl

这是一种加密文本并返回密码文本的方法:

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=“一些明文”。加密(CryptologyMethod.TripleDes);
//密文是空的

我想我以前遇到过这个问题,解决方案在我弄明白后非常明显,在那之前完全不透明

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

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

曾为我处理过类似的问题,希望能有所帮助。

我没有投反对票,但:到底是什么问题?编译器错误?“错误的”加密?对于一个拥有近5k代表的人来说,你不知道如何提问。错误是什么,输入是什么,预期输出是什么?你意识到你需要重新设置你的流位置后,填补它吗?各位,我很抱歉,我更新了问题。感谢重新打开此问题。:)为什么它会在钻石上产生一些
标记?另外,当我想用相同的密钥解密它时,它说要解密的数据长度无效。这听起来像是一个完全不同的问题。这是否意味着您现在已经修复了流处理?