Как преобразовать следующий криптографический код (VB.NET 4.0) в эквивалент C++, используя функции Microsoft CryptoAPI (CryptDeriveKey, BCrypt [...], CryptAcquireContext и т. Д.)? (Я не нашел ни одной статьи в Интернете, описывающего AES с использованием Microsoft CryptoAPI ...)AES/Rijndael в C++ Microsoft CryptoAPI
Dim Key(31) As Byte
Dim IV(15) As Byte
Array.Copy(SomeByteArray, IV, 16)
Array.Copy((New SHA512Managed).ComputeHash(SomeByteArray), Key, 32)
Using AESEncr As New RijndaelManaged() With {.Padding = PaddingMode.ISO10126}
FinalEncrypted = AESEncr.CreateEncryptor(Key, IV).TransformFinalBlock(AnotherByteArray, 0, AnotherByteArray.GetLength(0))
End Using
и расшифровке один:
Dim Key(31) As Byte
Dim IV(15) As Byte
Array.Copy(SomeByteArray, IV, 16)
Array.Copy((New SHA512Managed).ComputeHash(SomeByteArray), Key, 32)
Using AESEncr As New RijndaelManaged() With {.Padding = PaddingMode.ISO10126}
FinalDecrypted = AESEncr.CreateDecryptor(Key, IV).TransformFinalBlock(FinalEncrypted, 0, FinalEncrypted.GetLength(0))
End Using
(Примечание: У меня уже есть C++ код Коротко о компании . метод SHA-512, так что не беспокойтесь, что)
Если вы не против, мы хотели бы, чтобы вы попробовали себя, вернитесь, если вы где-нибудь застряли. –
Начать чтение [здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa380256 (v = vs.85) .aspx), затем написать код и посмотреть, что произойдет. –
@owlstead Я нашел, как использовать CNG BCrypt.dll, но: 1) Он не поддерживает Windows XP, который имеет вышеуказанный код .NET, 2) Он не поддерживает настраиваемые ключевые/iv длины (свойства BCRYPT_OBJECT_LENGTH и BCRYPT_BLOCK_LENGTH доступны только для чтения) и 3) Он не поддерживает установку настраиваемого ключа из массива байтов (я предполагаю, что, поскольку я читаю [этот код] (http://www.codeproject.com/Articles/18713/Simple- путь к крипте-а-файл-с-CNG)). Итак, что я могу сделать для решения всех вышеперечисленных проблем? (отказ от платформы XP НЕ является для меня опцией ...) – Jason