mcrypt最安全的密钥是什么?
使用128位密钥是什么意思?这是多少个字符?
我的钥匙是带有数字和字母的32个字符。
我正在使用mcrypt加密/解密签名到我网站的用户的个人数据。
答案 0 :(得分:0)
最安全的密钥只是一堆随机数据(二进制文件非常好),是的128位密钥使用32个字符。一个nonce函数应该足以创建一个强密钥(如果你是偏执狂,它可以帮助散列):
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);
答案 1 :(得分:0)
没有最安全的键这样的东西。它就像一个“密码”。 如果编码算法是对称的,则密钥允许您对数据进行编码/解码。
128位密钥只是一个由128位组成的密钥,即16字节。 在ASCII中,1个字节= 1个字符;但是大多数密钥只是随机二进制数据,可以是base64编码的,导致字符串表示为24个字符。
此外,mcrypt是一个php扩展,它允许您使用相同的接口使用多种编码算法。密钥的大小取决于算法。 有关所选算法的密钥大小,请参阅mcrypt_module_get_algo_key_size。