openssl_random_pseudo_bytes的替代方案 - 生成安全的唯一令牌

时间:2016-08-11 08:38:40

标签: php function token

我的服务器主机有php版本5.2.17。我正在使用随机令牌并在我的函数中使用openssl_random_pseudo_bytes。

for i, g in DF.groupby(['Label','Date2']):
    print (g)
    print ('diff2: ')
    print (g[['Date', 'Date2']].diff())
    print ('------------')

  Label       Date      Date2
0     A 1981-03-06 1981-03-06
diff2: 
   Date  Date2
0   NaT    NaT
------------
  Label       Date      Date2
3     A 1983-11-08 1982-06-11
diff2: 
   Date  Date2
3   NaT    NaT
------------
  Label       Date      Date2
2     A 1983-11-08 1983-11-08
diff2: 
   Date  Date2
2   NaT    NaT
------------
  Label       Date      Date2
1     A 1981-03-06 1986-05-01
diff2: 
   Date  Date2
1   NaT    NaT
------------
  Label       Date      Date2
4     B 1977-02-26 1977-02-26
diff2: 
   Date  Date2
4   NaT    NaT
------------
  Label       Date      Date2
5     B 1991-09-04 1991-09-04
diff2: 
   Date  Date2
5   NaT    NaT
------------

尝试从Scott's answer运行此代码。

它在我的本地主机上运行良好,具有更高的PHP版本。 除了升级我的服务器php版本。 openssl_random_pseudo_bytes( $length); 的替代功能是什么?

更新:使用openssl_random_pseudo_bytes,如何生成安全的唯一令牌? 截至目前,我正在使用这行代码:

mt_rand, rand or uniqid

$token = md5(uniqid(rand(), true));

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我正在使用5.6,但也一直在寻找创建安全和唯一令牌的方法,因为我无法使openssl_random_pseudo_bytes函数起作用。我在github上运行了paragonie的random_compat,这应该允许你使用random_bytes()和random_int()(两者都只适用于PHP7)。他们确实说它应该能够在理论上与旧的5.x版本的PHP一起使用,尽管它们确实建议更新到当前稳定版本的php。 https://github.com/paragonie/random_compat

这是另一个堆栈溢出答案的链接,建议使用random_bytes()作为$ token = bin2hex(random_bytes($ length));

best practice to generate random token for forgot password

此外我发现的链接暗示了paragonie的random_compat https://akrabat.com/random_bytes-in-php-5-6-and-5-5/ https://paragonie.com/blog/2015/07/how-safely-generate-random-strings-and-integers-in-php

答案 1 :(得分:0)

openssl_random_pseudo_bytes(10)的替代方式类似于PHP 5.X

中的decbin(rand(0,1024))