我正在尝试使用以下代码加密一些数据:
public static byte[] EncryptString(byte[] input, string password)
{
PasswordDeriveBytes pderiver = new PasswordDeriveBytes(password, null);
byte[] ivZeros = new byte[8];
byte[] pbeKey = pderiver.CryptDeriveKey("RC2", "MD5", 128, ivZeros);
RC2CryptoServiceProvider RC2 = new RC2CryptoServiceProvider();
byte[] IV = new byte[8];
ICryptoTransform encryptor = RC2.CreateEncryptor(pbeKey, IV);
MemoryStream msEncrypt = new MemoryStream();
CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
csEncrypt.Write(input, 0, input.Length);
csEncrypt.FlushFinalBlock();
return msEncrypt.ToArray();
}
Run Code Online (Sandbox Code Playgroud)
但是,当它到达初始化我的CryptoStream对象时,它会抛出以下错误:
"Stream不支持寻求." 为了澄清,上面的代码中没有错误处理,所以只是运行它不会"破坏",坚持.但是,单步执行代码,CryptoStream对象一旦初始化就会在其属性中显示此错误.
为什么是这样?我怎么能避免它呢?
所以代码实际上运行没有异常,但问题是当你在调试器中查看属性时?如果是这样,那很容易 - 一些属性(Position例如)依赖于能够在流中寻找.你不能这样做CryptoStream- 所以财产评估失败.
你不需要避免这种情况 - 它完全没问题.