sha1sum
는 실제 sha의 16 진 인코딩 형식을 출력합니다. base64로 인코딩 된 변형을보고 싶습니다. 파이프 할 수있는 이진 버전을 출력하는 명령은 다음과 같습니다. echo -n "message" | <some command> | base64
또는 직접 출력하면 괜찮습니다.
OpenSSL 의 명령 줄 유틸리티가있는 경우 이진 형식으로 다이제스트를 생성하고 base64 (별도의 호출)로 변환 할 수도 있습니다.
echo -n foo | openssl dgst -binary -sha1 | openssl base64
sha1sum
는 이진 출력에 대한 옵션을 제공하지 않기 때문에 od
와 반대되는 유틸리티를 찾아 파이프해야합니다. fschmitt가 'reverse'및 'plain dump'플래그와 함께 xxd
를 사용하도록 제안하면 다음과 같습니다.
sha1sum | cut -f1 -d\ | xxd -r -p | base64
나는 당신이 원하는 것을 완전히 확신하지 못하지만 다음과 같은 것이 효과가 있다고 생각합니다.
$ 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
를 사용하는 경우 예상되는 출력을 얻기 위해 약간의 형식 설정으로 재생해야 할 수도 있습니다.
Perl에는 base64 모듈이 있습니다 (5.7.1 이후 기본 배포판에 있음).
echo foo | sha1sum | \
Perl -MMIME::Base64 -ne '/^([[:xdigit:]]+)/ and print encode_base64(pack("H*",$1))'
Digest::SHA
모듈 (5.9.3 이후 기본 배포판) 또는 이전 Digest::SHA1
모듈이있는 경우 Perl에서 전체 계산을 수행 할 수 있습니다. Perl 5.10.1에서 b64digest
는 base64 출력을 채우지 않습니다. 가장 쉬운 방법은 패딩이 필요한 경우 MIME::Base64
를 사용하는 것입니다.
Perl -MDigest::SHA -e 'print Digest::SHA->new(1)->addfile(*STDIN)->b64digest'
Perl -MMIME::Base64 -MDigest::SHA \
-le 'print encode_base64(Digest::SHA->new(1)->addfile(*STDIN)->digest)'
Base64로 인코딩 된 SHA256 해시는 최근 OpenBSD에서 표준 파일 체크섬이되었습니다. OpenBSD의 -b
에 sha256
옵션을 추가하면됩니다 (또는 sha1, sha512). 명령:
$ FILE=/dev/null
$ sha256 -q -b $FILE
47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=
또는:
$ cksum -q -a sha256b $FILE