mcrypt编码有多安全?

3

我有两个函数和一个随机生成的密钥:

function encode ($a) {
    $key = "7HLgdzXyaTaZuTss6xayLk3qLTJ2jsRLgPnMzpNwhwnEZsnHUfHxfYW5r3sQcZsC";
    $aEncoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,md5($key),$a,MCRYPT_MODE_CBC,md5(md5($key))));
    return $aEncoded;
}

function decode ($a) {
    $key = "7HLgdzXyaTaZuTss6xayLk3qLTJ2jsRLgPnMzpNwhwnEZsnHUfHxfYW5r3sQcZsC";
    $aDecoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256,md5($key),base64_decode($a),MCRYPT_MODE_CBC,md5(md5($key))),"\0");
    return $aDecoded;
}

当用户登录时,一些私有数据和当前时间戳将被编码并保存为会话 cookie。同时,该时间戳也将保存在 mysql 数据库中。现在我想在用户发送数据包到 ws 服务器时对其进行身份验证。是否安全将密钥发送到服务器,在那里解码并检查密钥的时间戳是否与保存在 mysql 数据库中的上一次登录时间戳匹配?(我还将检查密钥是否过期,因此如果有人不再登录,则 6 小时后密钥将不再起作用。)编辑: 用户将无法看到这些函数,密钥将在登录 php 文件中生成!

最好不要使用mcrypt,它已经被废弃,多年没有更新,并且不支持标准的PKCS#7(原名PKCS#5)填充,只支持非标准的空填充,甚至不能用于二进制数据。mcrypt存在许多未解决的错误,这些错误可以追溯到2003年。mcrypt扩展已被弃用,将在PHP 7.2中删除。相反,考虑使用defuseRNCryptor,它们提供了完整的解决方案,并得到维护和修复。 - zaph
您指定了 MCRYPT_RIJNDAEL_256,但这可能不是您想要的。256 是指块大小,而不是密钥大小。通常指定 128 位块大小,因为它与 AES 兼容。 - zaph
对于CBC模式,请使用随机IV,在加密数据前缀中添加IV以供解密使用,它不需要保密。 - zaph
1个回答

1
使用base64对登录信息进行编码并不能增加安全性。
为了实现一种安全的方法,我建议使用密钥绑定加密,就像OpenSSL一样。
PHP也支持它,您可以在php程序中定义一个密钥,并使用该密钥加密您的cookie。我还建议使用动态密钥(例如6位数字日期170417),以防需要完全难以发现cookie!
请查看openssl_encrypt和openssl_get_cipher_method()。

1
谢谢!首先,如果有人黑掉了密钥并能够通过另一个用户的密钥进行身份验证,他无法造成任何损害。(这就是为什么我不需要高级安全性)。我从未听说过openssl,只是读到应该始终使用openssl而不是base64。这是真的吗?还是base64有任何优势? - Simon Pannek
2
Base64完全没有任何安全性。它不是一种加密算法,而是一种用文本表示二进制数据的方式,以便可以轻松地在某些协议上进行传输。 OP代码的安全性完全取决于mcrypt_encrypt()mcrypt_decrypt() - Chris
1
@SimonPannek,我现在明白了。但是你最初问的是base64有多安全,这正是这位用户回答的(不正确)。Stack Overflow的问题和答案旨在为将来的其他用户以及直接提问和回答的用户提供资源。感谢您更新您的问题;如果Zich更新此答案以删除关于base64是“中等安全性方法”的部分,我会取消我的投票。 - Chris
2
@Zich,你完全错了。Base64根本没有任何安全性。 它几乎甚至不能混淆;即使它能够混淆,也无法提供有意义的安全性。从base64编码的字符串中获取数据所需的唯一操作是对其进行base64解码。这个功能已经内置 几乎每种语言中。 - Chris
1
@Zich,仅仅因为一些数据不是明文并不意味着它更安全。旧的二进制.doc Word文件虽然不可读,但在Word中打开它们却变得非常简单。你会认为那种格式是“安全”的吗?Base64与此类似。它的目的与安全完全无关,并且不提供任何安全性。您应该编辑您的答案以删除声称base64提供“中等安全性”的说法。保留这种说法是不负责任和危险的。 - Chris
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接