我有一个.NET字符串,它是加密字节数组的Base64编码表示。它是这样产生的:
String Encrypt( String message )
{
CryptoStream cryptostream = ...
StreamWriter stream = new StreamWriter( cryptostream );
...
return Convert.ToBase64String( ... );
}
现在我想要一个像
这样的解密功能String Decrypt( String cypher )
{
TextReader reader = new StringReader( cypher );
byte[] buffer = new byte[ cypher.Length ];
for( int i = 0; i < cypher.Length; ++i )
{
buffer[ i ] = (byte) reader.Read();
}
FromBase64Transform transformer = new FromBase64Transform();
MemoryStream raw = new MemoryStream
(
transformer.TransformFinalBlock( buffer, 0, buffer.Length )
);
...
}
有没有办法直接使用FromBase64Transform 和CryptoStream(如.NET文档所示),而不是手动将字符串转换为字节,然后手动解码字节,最后解密解码的字节?
答案 0 :(得分:1)
我总是使用Convert类将字符串转换为字节数组。
一个例子:
public static string DeCryptString(string s) {
byte[] b = System.Convert.FromBase64String(s);
using (MemoryStream ms = new MemoryStream(b))
using (CryptoStream cs = /* Create decrypting stream here */)
using (StreamReader sr = new StreamReader(cs)) {
string buf = sr.ReadToEnd();
return buf;
}
} // DeCryptString
答案 1 :(得分:0)
从.NET 3.5开始,没有公开的内置方式从字符串流式传输。
您可以实现一个继承自Stream的简单StringStream类,这样您就不必将字符串转换为字节数组。