我正在为一个项目(使用vb.net 4.5)工作,该项目必须使用密钥进行AES加密(将作为该函数的输入参数提供)
我尝试使用以下代码
Imports System.Security.Cryptography
Imports System.Text
Public Class EncryptionFunction
Public Function DoEncryption(ByVal keyByte() As Byte, IV() As Byte)
Dim a As Aes = Aes.Create
a.Mode = CipherMode.OFB
Dim encryptor As ICryptoTransform
encryptor = a.CreateEncryptor(keyByte, IV)
End Function
End Class
但
中发生了错误encryptor = a.CreateEncryptor(keyByte,IV)
错误是"发生内部错误" ,如果我改变密码模式它可以正常工作,但我必须使用OFB模式。
那么,有什么建议吗?
答案 0 :(得分:0)
Aes.Create
默认为 CryptoAPI 创建包装器(即 AesCryptoServiceProvider
)。因为 CryptoAPI 使用所谓的“加密服务提供程序”,除了系统服务提供程序之外,这些服务提供程序还可以安装在 Windows 上,而且系统预安装的加密服务提供程序列表因 Windows 版本和版本而异,所以当您使用 Aes.Create
时,您的代码实际上是依赖于操作系统的。所以,Aes.Create
可能会产生不可预知的结果,这是不可避免的。
如果您需要完全的可预测性,最好使用其他 Aes
实现,可能是 AesManaged
或任何自定义库。 Aes.Create
本质上依赖于操作系统。