我只是看了一下AES加密算法,有几个问题。
Function AESEncryption(ByVal input As String, ByVal pass As String) As String
Dim AES As New System.Security.Cryptography.RijndaelManaged
Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider
Dim encrypted As String = ""
Try
Dim hash(31) As Byte
Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(pass))
Array.Copy(temp, 0, hash, 0, 16)
Array.Copy(temp, 0, hash, 15, 16)
AES.Key = hash
AES.Mode = Security.Cryptography.CipherMode.ECB
Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor
Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(input)
encrypted = Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
Return encrypted
Catch ex As Exception
End Try
End Function我想知道参数输入是什么,传递是什么。是传递密码,如果是,输入是什么。
发布于 2015-11-16 00:19:27
像AES这样的对称密码使您能够用生成密文(encrypted)的密钥隐藏一些明文(input)。为了从密文中恢复明文,使用相同的密钥。
AES支持128、192和256位的密钥,但密码通常具有任意长度(并且熵不大)。这段代码使用密码参数(pass)作为单个MD5散列调用的输入,以派生128位的密钥。这不是很安全,因为MD5和AES非常快,攻击者可能每秒尝试很多密码(暴力破解)来解密密文。一种更好的方法是使用迭代的基于密码的密钥派生函数,如(PBKDF2,bcrypt,scrypt)从密码派生密钥。更多信息请访问:How to securely hash passwords?
ECB模式不是很安全,因为它将明文的一些结构泄露给密文,正如ECB penguin所看到的那样。为了实现语义安全,应该使用带有随机初始化向量(IV)的CBC模式。
更好的方法是使用像GCM或EAX这样的身份验证模式,或者使用具有强大MAC功能的encrypt-then-MAC方案,比如HMAC-SHA256。
https://stackoverflow.com/questions/33721426
复制相似问题