sha1sum
실제 sha를 16진수 인코딩으로 출력합니다. Base64로 인코딩된 변형을 보고 싶습니다. 다음과 같이 파이프할 수 있는 바이너리 버전을 출력하는 명령이 있을 수 있습니다. echo -n "message" | <some command> | base64
또는 직접 출력하는 경우에도 괜찮습니다.
답변1
명령줄 유틸리티가 있는 경우OpenSSL, 이진 형식으로 다이제스트를 생성하거나 심지어 base64로 변환할 수도 있습니다(별도의 호출에서).
printf %s foo | openssl dgst -binary -sha1 | openssl base64 -A
-sha256
등도 -sha512
지원됩니다.
답변2
바이너리 출력 옵션이 제공되지 않으므로 sha1sum
반대의 기능을 수행하는 유틸리티를 찾아서 od
파이프해야 할 수도 있습니다. fschmitt의 제안에 따라 "reverse" 및 "plain dump" 플래그와 함께 사용하면 xxd
다음과 같습니다.
sha1sum | cut -f1 -d\ | xxd -r -p | base64
답변3
나는 당신이 원하는 것을 완전히 이해하지 못하지만 다음과 같은 것이 효과가 있을 것이라고 생각합니다.
$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
기본적으로 16진수 출력을 가져와 sed
이를 사용하여 이스케이프된 16진수 값의 문자열로 만든 다음 echo -en
해당 바이트를 base64
.
다음 연습을 수행하여 최종 출력이 동일한 해시 값에 해당하는지 확인할 수 있습니다.
$ echo -n "message" | sha1sum
6f9b9af3cd6e8b8a73c2cdced37fe9f59226e27d -
$ echo -ne "$(echo -n "message" | sha1sum | cut -f1 -d" " | sed -e 's/\(.\{2\}\)/\\x\1/g')" | base64
b5ua881ui4pzws3O03/p9ZIm4n0=
$ echo -n "b5ua881ui4pzws3O03/p9ZIm4n0=" | base64 -d | xxd
0000000: 6f9b 9af3 cd6e 8b8a 73c2 cdce d37f e9f5 o....n..s.......
0000010: 9226 e27d .&.}
육안 검사를 통해 base64 값이 원래 16진수와 일치하는 것으로 나타났습니다. hexdump
대신 사용하는 경우 xxd
원하는 출력을 얻으려면 형식을 약간 조정해야 할 수도 있습니다.
답변4
Base64로 인코딩된 SHA256 해시는 상당히 표준적인 파일 체크섬이 됩니다.오픈BSD-b
최근에는 sha256
OpenBSD(또는 sha1, sha512) 명령에 옵션을 추가하면 됩니다.
$ FILE=/dev/null
$ sha256 -q -b $FILE
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
또는:
$ cksum -q -a sha256b $FILE