最安全的密钥为128位密钥


Safest key for mcrypt 128 bit key?

加密最安全的密钥是什么?

使用128位密钥意味着什么?有多少个字符?

我的密钥是32个字符的数字和字母。

我正在使用mcrypt加密/解密我的网站签名用户的个人数据

不存在最安全的密钥。它就像一个"密码"。如果编码算法是对称的,则给出的密钥允许您对数据进行编码/解码。

128位密钥就是一个由128位组成的密钥,也就是16个字节。在ASCII中,1字节= 1个字符;但大多数密钥只是随机的二进制数据,可以进行base64编码,从而得到24个字符的字符串表示。

此外,mcrypt是一个php扩展,它允许您使用相同的接口使用多种编码算法。密钥的大小,取决于算法。请参见mcrypt_module_get_algo_key_size查看所选算法的密钥大小。

最安全的密钥只是一堆随机数据(二进制很好),是的,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);