mcrypt의 가장 안전한 키는 무엇입니까?mcrypt 128 비트 키를위한 가장 안전한 키?
128 비트 키를 사용한다는 것은 무엇을 의미합니까? 얼마나 많은 글자입니까?
내 키는 숫자와 문자가 포함 된 32 자입니다.
저는 mcrypt를 사용하여 내 사이트에 서명 한 사용자의 개인 데이터를 암호화/해독합니다.
mcrypt의 가장 안전한 키는 무엇입니까?mcrypt 128 비트 키를위한 가장 안전한 키?
128 비트 키를 사용한다는 것은 무엇을 의미합니까? 얼마나 많은 글자입니까?
내 키는 숫자와 문자가 포함 된 32 자입니다.
저는 mcrypt를 사용하여 내 사이트에 서명 한 사용자의 개인 데이터를 암호화/해독합니다.
안전한 키 같은 건 없다. 그것은 "암호"와 같습니다. 키를 사용하면 인코딩 알고리즘이 대칭 인 경우 데이터를 인코딩/디코딩 할 수 있습니다.
128 비트 키는 16 비트 인 128 비트로 구성된 키입니다. ASCII에서 1 바이트 = 1 문자; 대부분의 키는 base64로 인코딩되어 24 자의 문자열 표현으로 이어질 수있는 임의의 2 진 데이터입니다.
게다가, mcrypt은 동일한 인터페이스를 사용하는 여러 인코딩 알고리즘을 사용할 수있게 해주는 php 확장 프로그램입니다. 키의 크기는 알고리즘에 따라 다릅니다. 선택한 알고리즘의 키 크기는 mcrypt_module_get_algo_key_size을 참조하십시오.
가장 안전한 키는 무작위 데이터 (바이너리는 꽤 괜찮음)입니다. 예, 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);