【发布时间】: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