Как я могу найти вектор инициализации CAPICOM, используемый для AES-шифрования моих данных? - PullRequest
1 голос
/ 29 декабря 2011

У меня есть приложение, написанное на Classic ASP, которое шифрует данные через CAPICOM и сохраняет их в базе данных.Код шифрования выглядит примерно так (Classic ASP, VB. Для краткости немного упрощен):

set encryptObject = Server.CreateObject("CAPICOM.EncryptedData")

encryptObject.Algorithm.Name = 4 ' 4 is AES
encryptObject.Algorithm.KeyLength = ' 0 is MAX
encryptObject.SetSecret(sharedSecret) ' sharedSecret was set earlier
encryptObject.Content = stringToEncrypt

encryptedString = encryptObject.Encrypt()

Теперь у меня есть приложение .NET, которое должно прочитать эти данные и расшифровать их.Я сделал AES-совместимое шифрование / дешифрование в .NET перед использованием класса RijndaelManaged, и я надеюсь, что смогу использовать тот же метод для дешифрования этих данных.Однако я не могу понять, как заставить это работать с зашифрованными данными CAPICOM, потому что RijndaelManaged требует, чтобы вы передавали ключ И вектор инициализации при вызове RijndaelManaged.CreateEncryptor, а CAPICOM не брал вектор инициализации.Я предполагаю, что CAPICOM должен использовать вектор инициализации, но не выставлять его.Как я могу найти этот вектор?

1 Ответ

1 голос
/ 29 декабря 2011

Начните с передачи IV всех нулей в процедуру расшифровки .NET.

Если все сообщение расшифровывается нормально, то при первоначальном шифровании также использовался нулевой IV.

Это большевероятно, что вы получите искаженный первый блок (16 байт) и читаемый второй и последующие блоки.

Если второй блок выглядит так, как будто это фактическое начало сообщения, тогда исходный IV был передан как первыйблок зашифрованного сообщения.Это довольно распространенная техника.

Если нет, то вам нужно будет спросить того, кто шифровал сообщение, какой IV они использовали.Или же жить без первых 16 байтов сообщения.

...