2013-12-19 56 views
1

我試圖用笨安全類來生成一個唯一的長碼,我可以用它來更新安全在線分貝不改變:笨哈希值在迴路

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中執行此操作的最佳方法是什麼?

回答

2

如果這是您要生成一個唯一的代碼,爲什麼不自己與建立一個內置的PHP函數?

<?php 

for ($i = 0; $i <= 1000; $i++) { 
    $hash = uniqid(md5(time()), true); 
    var_dump($hash); 
} 

?> 

輸出示例:http://pastebin.com/eSWaLhUt

正如你所看到的,它是獨一無二的,不管你通過循環迭代的速度有多快。

+0

謝謝,我正在與此。 – user61629

1

uniqid方法將提供一個唯一的防僞碼(一定要使用more_entropy參數但這並不是格外安全所以這取決於你使用的是什麼它考慮使用mt_rand

uniqid docs

mt_rand docs

+0

謝謝,這有幫助。 – user61629

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); 
} 
+0

好信息。在我的情況下,我用Windows開發 – user61629