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