使用php生成API客户端密钥和客户端密钥?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (209)

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

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


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

如果没有,如果有人能指出我更可靠的剧本,我将很高兴。谢谢

提问于
用户回答回答于

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

应尽可能避免使用md5。如今,即使你使用随机盐upong哈希生成,md5的碰撞攻击也很简单,被认为是微不足道的。你应该至少使用sha1(它也有点容易碰撞,虽然没有md5那么容易)或sha256。

如果你想远离sha1 / sha256,还有很多选择,虽然到2018年标准,sha256作为哈希算法足够安全。但是,我会使用除microtime之外的其他东西作为哈希输入参数。即使你正在腌它,它也是可以预测的。为了在可预测性的安全方面犯错,我建议连接一些额外的东西(即microtime.mt_rand.something_else_which_is_also_random)

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

扫码关注云+社区

领取腾讯云代金券