【问题标题】:Generate API Client Key and Client Secret with php使用 php 生成 API 客户端密钥和客户端密钥
【发布时间】:2018-08-28 00:03:44
【问题描述】:

我正在为 Joomla 创建一个自定义支付处理组件。该组件有一个 API,允许用户处理来自其他来源的付款,例如 Woocomerce、Wix 等。 我想知道用我自己编写的 PHP 脚本生成“客户端密钥”和“客户端密钥”是否安全。

//Client Key
$key = md5(microtime(true).mt_Rand());


//Client Secret
$secret = bin2hex(random_bytes(32));

如果没有,如果有人能指点我一个更可靠的脚本,我会很高兴。 谢谢

【问题讨论】:

    标签: php client client-server


    【解决方案1】:

    只要您采取一些预防措施,使用 PHP 生成密钥本身并不是不安全的。虽然您的问题可能会吸引很多基于意见的建议,这些建议可能都是正确的,但我建议您提供一些建议

    应尽可能避免使用 md5。如今,即使您在生成哈希时使用随机盐,针对 md5 的碰撞攻击也非常简单,可以认为是微不足道的。你至少应该使用 sha1(这也有点容易碰撞,虽然不如 md5 容易)或 sha256。

    如果您也想远离 sha1/sha256,还有很多替代方案,尽管 sha256 按照 2018 年的标准,作为一种散列算法已经足够安全了。但是,我会使用微时间以外的东西作为哈希输入参数。即使你在腌制它,它也是可以预见的。只是为了在可预测性的安全方面犯错,我建议连接一些额外的东西(即 microtime.mt_rand.something_else_which_is_also_random)

    至于秘密,我会建议一些更强大的东西。从密码学的角度来看,PHP 中不存在真正的随机性,因此 random_bytes 可能比乍一看更容易预测和利用。再加上 bin2hex 只是一种转换而不是单向函数的事实,使得整个秘密成为一个薄弱环节。我会使用更长的字符串(32 似乎很弱)并将它与其他东西结合起来(可能是按位 XOR 与等长的随机字符串)

    【讨论】: