首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AES加密算法中"input“和"pass”是用来做什么的?

在AES加密算法中"input“和"pass”是用来做什么的?
EN

Stack Overflow用户
提问于 2015-11-15 23:31:08
回答 1查看 198关注 0票数 0

我只是看了一下AES加密算法,有几个问题。

代码语言:javascript
复制
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

我想知道参数输入是什么,传递是什么。是传递密码,如果是,输入是什么。

EN

回答 1

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33721426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档