使用FromBase64Transform和CryptoStream?

时间:2008-10-09 13:29:16

标签: .net

我有一个.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文档所示),而不是手动将字符串转换为字节,然后手动解码字节,最后解密解码的字节?

2 个答案:

答案 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类,这样您就不必将字符串转换为字节数组。