[英]Safest key for mcrypt 128 bit key?
什么是mcrypt最安全的密鑰?
使用128位密鑰是什么意思? 那是幾個字符?
我的鑰匙是32個字符,帶有數字和字母。
我正在使用mcrypt加密/解密登錄到我的網站的用戶的個人數據。
最安全的密鑰只是一堆隨機數據(二進制代碼相當不錯),是的,一個128位密鑰使用32個字符。 隨機數函數足以創建一個強鍵(如果您偏執,則對其進行哈希處理可能會有所幫助):
function nonce($l = 32, $raw = true){
$ret = '';
for($x = 0; $x < $l; $x++) $ret .= chr(mt_rand(0,255));
return ($raw ? $ret : base64_encode($ret));
}
一個非常強大的哈希函數將如下所示(此哈希函數是PBKDF2哈希):
function hash($p, $s, $c = 5000, $kl = null, $a = 'SHA256'){
$hl = strlen(hash($a, null, true));
if(is_null($kl)) $kl = $hl;
$kb = ceil($kl/$hl);
$dk = '';
for($block = 1; $block <= $kb; $block++){
$ib = $b = hash_hmac($a, $s.pack('N', $block), $p, true);
for($i = 0; $i < $c; $i++)
$ib ^= ($b = hash_hmac($a, $b, $p, true));
$dk .= $ib;
}
return substr($dk, 0, $kl);
}
您將像這樣使用它:
$key = hash(nonce(), nonce(), 5000, 32);
沒有最安全的鑰匙。 這就像一個“密碼”。 如果編碼算法是對稱的,則密鑰提供了允許您對數據進行編碼/解碼的功能。
128位密鑰只是由128位(即16個字節)組成的密鑰。 在ASCII中,1個字節= 1個字符; 但是大多數鍵只是隨機的二進制數據,可以對base64進行編碼,從而形成24個字符的字符串表示形式。
此外, mcrypt是php擴展,使您可以使用同一接口使用多種編碼算法。 密鑰的大小取決於算法。 有關所選算法的密鑰大小,請參見mcrypt_module_get_algo_key_size 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.