1
如何使用Microsoft CryptoAPI(CryptDeriveKey,BCrypt函數,CryptAcquireContext等)將以下加密代碼(VB.NET 4.0)轉換爲與C++等價的代碼? (我還沒有在網上查到描述使用Microsoft CryptoAPI的AES在單篇文章......)C++中的AES/Rijndael 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的方法,所以不打擾)
如果您不介意,我們希望您嘗試一下自己,如果您遇到困難,請回來。 – 2014-09-01 17:41:38
開始閱讀[這裏](http://msdn.microsoft.com/en-us/library/windows/desktop/aa380256(v = vs.85).aspx),然後編寫一些代碼,看看會發生什麼。 – 2014-09-01 17:53:23
@owlstead我發現如何使用CNG BCrypt.dll,但是:1)它不支持Windows XP,上面的.NET代碼會這樣做,2)它不支持自定義鍵/ iv長度(屬性BCRYPT_OBJECT_LENGTH和BCRYPT_BLOCK_LENGTH是隻讀的)和3)它不支持從字節數組中設置自定義鍵(我假設是這樣,因爲我閱讀[此代碼](http://www.codeproject.com/Articles/18713/Simple-辦法對隱窩-A-文件與-CNG))。那麼,我能做些什麼來解決所有上述問題? (放棄XP平臺不是我的選擇...) – Jason 2014-09-02 10:13:23