ASP中的AES256加解密

Posted

技术标签:

【中文标题】ASP中的AES256加解密【英文标题】:AES256 encryption and decryption in ASP 【发布时间】:2011-10-05 15:34:32 【问题描述】:

我必须将用户名和密码从我的 iphone 应用程序发送到 ASP 服务器页面,然后我将使用:http://iphonedevelopment.blogspot.com/2009/02/strong-encryption-for-cocoa-cocoa-touch.html 对其进行加密。在 ASP 页面上解密这些字符串的最佳方法是什么?我找到了一些示例,但是由于加密将发生在两个完全不相关的方面,我认为我需要在双方都对密钥进行硬编码,并且我找不到任何没有使用生成密钥的示例。

谢谢!

【问题讨论】:

【参考方案1】:

是的,密钥管理是个大问题。您必须在两边都有密钥,在 ios 上,您可以将密钥保存在 Keychain 中,这是安全的,但安全获取密钥的过程更加困难。

另一个主要问题是让两边的所有参数都相同。特别感兴趣的是

    加密密钥值和大小 模式:CBC、ECB 等(您可能应该使用 CBC) 大多数模式都需要初始化向量 (iv) 填充方法:PKCS7等(AES是块密码,需要输入 块大小的倍数)

【讨论】:

谢谢 - 您对如何处理这些问题有什么建议吗? 一开始选择了简单的测试数据,让它发挥作用并进入更复杂的情况。例如:最初选择一个全为 0 的 iv,CBC,数据正好是一个块大小,没有填充。当它起作用时,开始增加更多的复杂性。无论如何,如果您想要真正的安全性,请让经验丰富的专业人员进行代码审查,我愿意。安全并不容易,加密部分是容易的部分。或使用 SSL。哦,如果他们有帮助,请接受答案。【参考方案2】:

为什么不使用 SHA1 将密码存储在数据库中,然后使用 HMAC 和客户端指定的密钥进行通信?

让服务器生成一个随机密钥并将其与登录请求一起发送。客户端计算密码的 SHA1 哈希,然后使用服务器指定的密钥计算密码的 HMAC SHA1 哈希。然后服务器验证结果是否正确。

在客户端:

// password is the plaintext password
// keyb64 is a random key specified by the server, encoded in base64.
string ComputeSecureHash(string password, string keyb64)

    byte[] data = Encoding.UTF8.GetBytes(password);
    byte[] key = Convert.FromBase64String(keyb64);
    byte[] hash;
    byte[] machash;
    // compute a plain SHA1 hash of the specified data
    using (SHA1Managed sha1 = new SHA1Managed())
    
        hash = sha1.ComputeHash(data);
    
    // now compute a HMAC hash of that hash, using the random key.
    using (HMACSHA1 sha1mac = new HMACSHA1(key))
    
        machash = sha1mac.ComputeHash(hash);
    
    return Convert.ToBase64String(machash);

在服务器端:

// hash is the string produced by the function above
// realHash is the SHA1 hash of the real password, which you've fetched from the db
// key is the key you generated for this login session
bool VerifyHash(string hash, byte[] realHash, byte[] key)

    byte[] machash;
    using (HMACSHA1 sha1mac = new HMACSHA1(key))
    
        machash = sha1mac.ComputeHash(realHash);
    
    return (Convert.ToBase64String(machash) == hash);

这允许您通过纯文本媒体进行身份验证,而无需破解密码。

【讨论】:

推出自己的计划往往会以眼泪收场。大多数开发人员最好坚持使用 TLS / SSL 等久经考验的真实技术。 这不是“我自己的方案”,它是一种众所周知的 MAC 身份验证形式。 我意识到这一点,但它正在验证客户端,而不是服务器。例如,该方案不会阻止 MITM。像 TLS 这样的技术可以,因此是较早的建议。 如何不阻止 MITM?这是一个服务器选择的密钥,可以防止重放攻击。您也无法解密密码。当然,您可以在经过身份验证后去攻击会话,但这不是问题要求阻止的。

以上是关于ASP中的AES256加解密的主要内容,如果未能解决你的问题,请参考以下文章

AES加解密使用总结

AES加解密 对称加密

Java中的AES加解密

国产接口工具ApiPost如何利用CryptoJS对请求参数进行MD5/AES加解密

python3 aes加解密代码

PHP AES加解密(兼容php5,php7)