네트워크 보안 및 데이터 무결성 검증에서 HMAC (해시 기반 메시지 인증 코드)는 일반적으로 사용되는 효과적인 기술입니다. 해시 함수와 키를 결합하여 메시지의 무결성 및 신원 인증을 확인합니다. PHP의 내장 Hash_hmac () 함수는 HMAC를 생성하는 편리한 도구를 제공하지만이 기사는보다 기본적인 해시 () 함수를 사용하여 HMAC를 수동으로 구현하는 방법을 소개합니다.
HMAC의 핵심 아이디어는 메시지 전후에 키를 스플 라이스 한 다음 스플 라이스 다음에 문자열을 해시하는 것입니다. 간단한 해시 값과 비교할 때 HMAC는 메시지가 변조되는 것을 효과적으로 방지하고 쉽게 위조 할 수 없습니다.
HMAC 계산 공식 :
HMAC(key, message) = hash((key ⊕ opad) || hash((key ⊕ ipad) || message))
안에:
|| 연결 작동을 의미합니다
bitwise xor를 나타냅니다
OPAD 는 외부 충전, 0x5c 반복 채우기입니다
iPad 는 내부 채우기, 0x36 반복 채우기입니다
다음은 php hash () 함수를 사용하여 HMAC를 수동으로 구현하는 방법을 보여줍니다.
<?php
function hmac_hash($algo, $key, $data) {
$blocksize = 64; // 최대hash함수 블록 크기는입니다64바이트
if (strlen($key) > $blocksize) {
$key = hash($algo, $key, true); // 키가 너무 길면,첫 번째hash고정 길이 이진 문자열을 형성합니다
}
$key = str_pad($key, $blocksize, chr(0x00)); // 키를 블록 크기로 채우십시오
$ipad = str_repeat(chr(0x36), $blocksize);
$opad = str_repeat(chr(0x5c), $blocksize);
$inner = $key ^ $ipad;
$outer = $key ^ $opad;
$inner_hash = hash($algo, $inner . $data, true); // 내부 해시,출력 바이너리 형식
$hmac = hash($algo, $outer . $inner_hash);
return $hmac;
}
// 시험
$key = "secretkey";
$message = "The quick brown fox jumps over the lazy dog";
echo "HMAC-SHA256: " . hmac_hash('sha256', $key, $message);
?>
위의 코드는 SHA-256 알고리즘을 사용하여 메시지 및 키에서 HMAC 계산을 수행하고 16 진 문자열을 반환합니다.
보다 효율적이고 안전한 PHP와 함께 제공되는 Hash_hmac () 함수를 사용하는 것이 좋습니다.
키 길이는 일반적으로 해시 블록 크기와 동일하도록 권장됩니다.
이진 출력 사용 (세 번째 매개 변수는 true 로 설정 됨)은 스 플라이 싱 작업에 도움이됩니다.
HMAC는 주로 메시지 인증에 사용되며 키는 안전하게 관리해야합니다.
PHP는 이미 편리한 hash_hmac () 함수를 가지고 있지만 HMAC를 구현하기 위해 Basic Hash () 함수를 사용하는 원리를 이해하고 마스터하면 보안 해시 메커니즘을 더 잘 이해하고 안전한 프로그래밍 기능을 향상시키는 데 도움이됩니다.
더 알고 싶다면 https://gitbox.net 관련 리소스를 방문 할 수 있습니다.