CLI에서 Base64로 인코딩된 shaX를 얻는 방법은 무엇입니까?

CLI에서 Base64로 인코딩된 shaX를 얻는 방법은 무엇입니까?

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최근에는 sha256OpenBSD(또는 sha1, sha512) 명령에 옵션을 추가하면 됩니다.

$ FILE=/dev/null
$ sha256 -q -b $FILE
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=

또는:

$ cksum -q -a sha256b $FILE

관련 정보