我正在为Joomla创建自定义支付处理组件。该组件具有一个API,允许用户处理来自其他来源的付款,例如Woocomerce,Wix等。 我想知道使用我自己编写的PHP脚本生成"客户端密钥"和"客户端密钥"是否安全。
//Client Key
$key = md5(microtime(true).mt_Rand());
//Client Secret
$secret = bin2hex(random_bytes(32));
如果没有,如果有人能指出我一个更可靠的脚本,我会很高兴。 谢谢
使用 PHP 生成密钥本质上并不是不安全的,只要您采取一些预防措施。虽然您的问题可能会吸引很多基于意见的建议,这些建议可能都是正确的,但我建议一些指示
应尽可能避免使用MD5。如今,md5 的碰撞攻击非常简单,即使您使用随机的 salt upong 哈希生成,也被认为是微不足道的。你至少应该使用 sha1(它也有点容易碰撞,尽管不像 md5 那么容易(或 sha256。
如果你想远离sha1/sha256,有很多选择,尽管sha256,按照2018年的标准,作为一种哈希算法已经足够安全了。但是,我会使用微时间以外的其他东西作为哈希输入参数。即使你正在腌制它,这也是可以预测的。为了保证可预测性的安全,我建议连接一些额外的东西(即microtime.mt_rand.something_else_which_is_also_random(
至于秘密,我会建议一些更强大的东西。从密码学的角度来看,PHP 中没有真正的随机性,因此random_bytes可能比乍一看更可预测和更容易利用。再加上bin2hex只是一个转换而不是单向函数的事实,使整个秘密成为一个薄弱环节。我会使用一个更长的字符串(32 似乎很弱(并将其与其他东西组合(也许是具有等长随机字符串的按位 XOR(