명령줄에서 OpenSSL을 사용하여 다음 Java 코드 조각을 실행해야 합니다.
private byte[] hmacSha256(byte[] key, byte[] payload) throws GeneralSecurityException {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(key, "HmacSHA256"));
mac.update(payload);
return mac.doFinal();
}
다음은 Java에서는 작동하지만 OpenSSL에서는 작동하지 않는 테스트 값입니다.
KEY_BASE64="xtztqVgjD+5VHL4rVeKYm0USpDJTEy5Tjc9aK6I/oV0="
KEY_HEX="c6dceda958230fee551cbe2b55e2989b4512a43253132e538dcf5a2ba23fa15d"
PAYLOAD_BASE64="j9F8TrzCabcDoLdHUDaUuv6ea224xikwbPF1IW0OjkY="
DIGEST_HEX="c2ec711448a4f5bb851279eca0a628847254855966ad09de7e734b7df48e198a"
난 이미 시도했어이 답변그러나 나는 다른 결과를 얻습니다. 다음과 같습니다.
$ echo $PAYLOAD_BASE64 | base64 -d | openssl dgst -sha256 -hmac -hex -macopt hexkey:$KEY_HEX
(stdin)= 93d5555dbf95873441ccc63f9a4bc361e6f291f7b0a81db4edc35b8212b04dad
16진수 형식으로 출력을 제공하지만 동일한 페이로드 및 키 값을 사용하여 Java 코드 조각을 실행할 때 얻은 값과 값이 일치하지 않습니다.
대부분의 Linux 기본 패키지 관리자 목록에서 광범위하게 사용할 수 있는 또 다른 명령줄 도구가 있습니다.
답변1
나는 직업을 얻었다. 내가 해야 할 일은 openssl sha256
대신 을 사용하는 것뿐이었습니다 openssl dgst -sha256
.
전체 명령은 다음과 같습니다.
$ echo $PAYLOAD_BASE64 | base64 -d | openssl sha256 -hex -mac HMAC -macopt hexkey:$KEY_HEX
(stdin)= c2ec711448a4f5bb851279eca0a628847254855966ad09de7e734b7df48e198a
답변2
NodeJ가 설치되어 있는 경우:
echo "console.log(require('crypto').createHmac('sha256', 'nonbase64key').update('password').digest('hex'))" | node
Python에서의 이에 상응하는 내용은 다음과 같습니다.
python3 -c 'import hashlib;import base64;import hmac;print(hmac.new(b"nonbase64key", "password".encode(), hashlib.sha256).hexdigest())'
동등한 순수 쉘 명령은 다음과 같습니다:
echo -n "password" | openssl sha256 -hmac "nonbase64key"
답변3
macOS 터미널의 예가 잘못되었습니다.
iOS(또는 Mac OS...)를 사용 중이고 제가 글을 쓰는 데 지치셨다면 2센트입니다.
https://apps.apple.com/it/app/hmac-sha256generator/id6448465719?l=en
답변4
openssl sha256 -hex -mac HMAC -macopt key:<key here> file.txt