mcrypt 128位密钥的最安全密钥?

时间:2011-12-22 22:53:29

标签: php

mcrypt最安全的密钥是什么?

使用128位密钥是什么意思?这是多少个字符?

我的钥匙是带有数字和字母的32个字符。

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

2 个答案:

答案 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