Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
.net 将FromBase64转换与CryptoStream一起使用?_.net - Fatal编程技术网

.net 将FromBase64转换与CryptoStream一起使用?

.net 将FromBase64转换与CryptoStream一起使用?,.net,.net,我有一个.NET字符串,它是一个加密字节数组的Base64编码表示。它是这样产生的: String Encrypt( String message ) { CryptoStream cryptostream = ... StreamWriter stream = new StreamWriter( cryptostream ); ... return Convert.ToBase64String( ... ); } 现在我想要一个解密函数,比如 String D

我有一个.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 )
    );
    ...
}
字符串解密(字符串密码)
{
TextReader=新的StringReader(cypher);
字节[]缓冲区=新字节[cypher.Length];
for(int i=0;i

有没有一种方法可以直接将FromBase64Transform与CryptoStream一起使用(正如.NET文档所建议的那样),而不是手动将字符串转换为字节,然后手动解码字节,最后解密解码后的字节?

从.NET 3.5开始,没有公共内置方法可以从字符串进行流式处理

您可以实现一个简单的StringStream类,该类继承自Stream,这将使您无需将字符串转换为字节数组。

我始终支持将字符串转换为字节数组的类

例如:

    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

实际上,在本例中,可以使用Convert返回的字节数组直接初始化内存流。这避免了写入和查找的调用。@Jerome,thx,我已经根据您的提示编辑了示例。回过头来看,我甚至不知道为什么我会这么复杂。