Иногда ошибка неверных данных при расшифровке - PullRequest
1 голос
/ 02 февраля 2011

У меня очень странная ситуация. В основном у меня есть код, который использует декриптор, созданный:

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 - расшифровщик, созданный ранее.

Обычно это работает. Иногда я получаю ошибку «неверные данные». Я распечатываю значение _data, и оно всегда одинаково.

Код является многопоточным, что, как я подозреваю, является причиной как проблемы, так и ее трудно воспроизвести. Расшифровщик создается при создании класса, а расшифровка выполняется в общей функции, но я не вижу там ничего, что не является потокобезопасным.

Есть идеи?

1 Ответ

1 голос
/ 02 февраля 2011
  1. Вы не должны предполагать, что что-либо безопасно для одновременных вызовов, если у вас нет оснований полагать, что это так.В документации у вас есть стандартный текст, что члены экземпляра не гарантируют поточно-ориентированную защиту, поэтому при использовании вы должны защищать блокировку des3.
  2. Вы не должны жестко кодироватьвектор инициализации;он должен выбираться случайным образом при шифровании данных, а затем каким-то образом храниться вместе с зашифрованными данными (многие люди предпочитают прикреплять их к началу данных, а затем удалять и использовать для расшифровки; используйте любую схему хранения, какую пожелаете),Использование того же IV побеждает цель IV, которая усложняет атаки открытого текста.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...