是否可以异步解密文件并将其转换为字节? 字节数据将被转换为另一个对象,如图像或其他东西。
所以,我想decypt文件,而不必将其保存到实际文件中,例如:
我加密了一张图片,我希望在不保存到真实文件的情况下对其进行解密,在这种情况下,解密后的文件就是图像。
因此,从我的观点来看,最好的方法是从异步读取加密文件中的字节并将字节转换为图像。
我需要线索的人,即使没有代码示例,我也很感激。感谢。
我使用msdn:
中的基本代码加密了文件 private static void encrypt(string fileInput,
string fileOutput,
string key)
{
FileStream fInput = new FileStream(fileInput, FileMode.Open, FileAccess.Read);
FileStream fOutput = new FileStream(fileOutput, FileMode.Create, FileAccess.Write);
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = ASCIIEncoding.ASCII.GetBytes(password);
des.IV = ASCIIEncoding.ASCII.GetBytes(password);
ICryptoTransform encryptor = des.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fOutput, encryptor, CryptoStreamMode.Write);
Byte[] byteArrayInput = new byte[fInput.Length];
fInput.ReadAsync(byteArrayInput, 0, byteArrayInput.Length);
cryptostream.WriteAsync(byteArrayInput, 0, byteArrayInput.Length);
cryptostream.Close();
fInput.Close();
fOutput.Close();
des.Dispose();
}
答案 0 :(得分:1)
首先:
using
而不是手动处理您的信息流。DESCryptoServiceProvider
确实是一次性的。async
方法,以便能够将await
与异步调用一起使用。您可以使用MemoryStream
:
using (var fInput = new FileStream(fileInput, FileMode.Open, FileAccess.Read))
using (var ms = new MemoryStream())
{
using (var des = new DESCryptoServiceProvider())
{
des.Key = ASCIIEncoding.ASCII.GetBytes(password);
des.IV = ASCIIEncoding.ASCII.GetBytes(password);
ICryptoTransform encryptor = des.CreateEncryptor();
using (var cryptostream = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
// Here, we're writing to the cryptoStream which will write to ms.
await fInput.CopyToAsync(cryptostream);
}
// Do something with ms here.
// If you want a byte array just do: ms.ToArray()
}
}
很多api会要求你Stream
。 MemoryStream
扩展了Stream
,因此您可以ms
向他们发送using
,但请确保您在ms
的{{1}}区域内执行此操作。
如果您只需要最终结果中的字节数组,则可以使用ms.ToArray()
。这样,如果您愿意,您可以使用using
块外部的字节数组。