【问题标题】: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 与等长的随机字符串)