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代表的人来说,你不知道如何提问。错误是什么,输入是什么,预期输出是什么?你意识到你需要重新设置你的流位置后,填补它吗?各位,我很抱歉,我更新了问题。感谢重新打开此问题。:)为什么它会在钻石上产生一些
?
标记?另外,当我想用相同的密钥解密它时,它说要解密的数据长度无效。这听起来像是一个完全不同的问题。这是否意味着您现在已经修复了流处理?