PHP의 사용 팩과는 다른 :펄 HMAC는 SHA256 나는이 PHP의 예처럼 SHA256 HMAC를 사용하여 펄에서 해시 생성 할 필요가
<?php
$key = pack('H*','THIS_IS_KEY');
$str ='THIS IS DE ENCODED STRING';
echo strtoupper(hash_hmac('sha256',$str, $key));
?>
를 내가 얻을 : 601B7C81389A37FC83C05275138280E8788CF9108528BC75D5C09CEA75904D5E
을하지만 난에서 동일한 작업을 수행하는 경우 Perl 스크립트 :
use Digest::SHA qw(hmac_sha256_hex);
my $key = pack('H*','THIS_IS_KEY');
my $str ='THIS IS DE ENCODED STRING';
print uc(hmac_sha256_hex($str, $key));
exit;
내가 얻을 : C683FD81DEFB7CDA3C031F5280682E80851FDC246310DB8C44057BC636를 4454E0
필자가 핵심 패키지 인 Perl이나 PHP를 포장하지 않으면 같은 결과를 얻습니다. 불행히도 PHP "pack"을 사용하는 예제와 정확히 같은 결과를 생성해야합니다.
누군가 해결책을 찾도록 도와 주시면 감사하겠습니다. 사전에
덕분에
웰치
두 경우 모두 * 실제 * 키는 무엇입니까? 즉,'pack '과 관련된 문제는 무엇입니까? 다른 hmac 함수가 그것을 (또는 str) 다르게 처리합니까? – user2864740
PHP 오류 로깅이 충분히 높다고 가정하면, 당신이 제공 한 PHP 코드는'pack' 사용에 관한 몇 가지 경고를 발산해야합니다. 두 스크립트 모두에서'$ key = 1234'를 하드 코딩 해보십시오. 그리고 생성 된 다이제스트는 동일하다는 것을 알아 두십시오. HMAC SHA256의 PHP 및 Perl 구현은 모두 동일하게 작동합니다. 그것은 서로 다른'pack' 구현체입니다! – tobyink
안녕하세요, 예, 문제는 팩 기능 구현에 있음을 확인합니다. 문제는 Perl을 코딩하고 있고 다른 쪽의 응용 프로그램이 PHP 메소드를 사용하고 있는데 데이터를 전달할 때 유효성을 검사하지 않았기 때문입니다. 필자는 Perl 스크립트를 제어 할 수 있기 때문에 양쪽 플랫폼 중 어느 것이 좋든 나쁘 든 동일한 결과를 얻는 방법을 찾아야합니다. 웨일스 사람 – Welch