我正在尝试使用codeigniter安全类生成一个唯一的长代码,我可以使用它来安全地更新在线数据库:
http://mydomain.com/myproject/index.php/my_controller/index/***3d51693c8c4***..
我注意到当我使用:
为循环中的单个记录创建哈希时$hash= $this->security->get_csrf_hash();
相同的哈希不断生成。我需要为循环中的每条记录生成一个唯一的哈希/安全代码。我在http://ellislab.com/codeigniter%20/user-guide/libraries/security.html中没有看到任何讨论如何执行此操作的内容。
在CI中执行此操作的最佳方法是什么?
答案 0 :(得分:2)
如果它是您想要生成的唯一代码,为什么不自己使用内置的php函数构建一个?
<?php
for ($i = 0; $i <= 1000; $i++) {
$hash = uniqid(md5(time()), true);
var_dump($hash);
}
?>
示例输出:http://pastebin.com/eSWaLhUt
正如您所看到的,无论您在循环中迭代的速度有多快,它都是独一无二的。
答案 1 :(得分:1)
答案 2 :(得分:1)
我更喜欢使用操作系统来生成唯一值。这个解决方案只是一个* nix解决方案,但是我最喜欢的一个
/**
* A Linux-dependent password generator. This seems to be about 1000x better than
* typical PHP-based password generation, and from what I hear, /dev/urandom should
* be secure enough for temporary passwords.
*
* Lifted from:
* http://stackoverflow.com/questions/6101956/generating-a-random-password-in-php
*/
static public function generatePassword($iLength=0)
{
$rFp = fopen('/dev/urandom', 'r');
if(!$rFp)
throw new RuntimeException("Can't access /dev/urandom to get random data.");
// 1024 bytes should be enough
$sRandom = fread($rFp, 1024);
fclose($rFp);
return substr(trim(base64_encode(md5($sRandom, true)), '='), $iLength * -1);
}