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