解密时偶尔会出现错误的数据错误

时间:2011-02-02 14:21:44

标签: vb.net encryption

我有一个非常奇怪的情况。 基本上我有使用由以下创建的解密器的代码:

Dim des3 As New TripleDESCryptoServiceProvider
des3.Mode = CipherMode.CBC
Return des3.CreateDecryptor(_encKey, _initVec)

_encKey和_initVec是硬编码的。 我通过调用它来使用它:

Dim res() As Byte = decrypt(Convert.FromBase64String(_data))
m_transformDec.TransformFinalBlock(res, 0, res.Length)

这里_data是一个包含加密值的字符串。 m_transformDec是之前创建的Decryptor。

通常这有效。偶尔,我收到“错误数据”错误。我打印出_data的值,它总是一样的。

代码是多线程的,我怀疑是这两个问题的原因,并且很难重现。解密器是在创建类时创建的,解密是在Shared函数中完成的,但是我没有看到任何不是线程安全的东西。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  1. 您不应该假设任何对于并发呼叫是安全的,除非您有理由相信它。在文档中,您有样板文本,实例成员不保证是线程安全的,因此您在使用它时应该防御性地锁定des3对象。
  2. 你不应该对初始化向量进行硬编码;它应该在加密数据时随机选择,然后以某种方式与加密数据一起存储(许多人选择将其添加到数据的开头,然后将其删除并用于解密;尽管使用您喜欢的任何存储方案) 。使用相同的IV会破坏IV的目的,这会使明文攻击变得更加困难。