CLI에서 base64로 인코딩 된 shaX를 어떻게 얻을 수 있습니까?


31

sha1sum실제 sha의 16 진 인코딩 형식을 출력합니다. base64로 인코딩 된 변형을보고 싶습니다. 아마도 파이프 할 수있는 바이너리 버전을 출력하는 명령 일 수도 있습니다. echo -n "message" | <some command> | base64또는 직접 출력하면 괜찮습니다.

답변:


40

OpenSSL 의 명령 줄 유틸리티가있는 경우 이진 형식으로 다이제스트를 생성하고 base64 (별도의 호출)로 변환 할 수도 있습니다.

echo -n foo | openssl dgst -binary -sha1 | openssl base64

1
echo foo | openssl dgst -binary -sha1 | base64동등하고 아마도 가장 깨끗한 방법입니다.
xenoterracide

3
opensslbase64에도 사용하면 하나의 도구 ( ksh: base64: not found) 에만 의존 할 수 있다는 이점이 있습니다.
Gilles 'SO- 악마 그만

2
과 같은 큰 메시지 요약 해시의 경우 최종 문자열에 옵션을 sha512추가 하여 결과 문자열을 여러 줄로 나누지 않도록 할 수 있습니다. -Aopenssl base64
mykhal

@Gilles 왜 echo foo > somefile; cat somefile | openssl dgst -binary -sha1 | openssl base64다른 문자열을 생성합니까?
georgeliatsos

@gliatsos 서로 다른 문자열을 생성 echo -n foo하고 echo foo생성합니다.
Gilles 'SO- 악마 그만

15

sha1sum이진 출력에 대한 옵션을 제공하지 않기 때문에 반대의 기능을 수행 od하고 파이프 하는 유틸리티를 찾아야 할 것입니다. fschmitt xxd가 'reverse'및 'plain dump'플래그와 함께 사용하도록 제안 하면 다음과 같습니다.

sha1sum | cut -f1 -d\ | xxd -r -p | base64


4
xxd를 -rp 플래그와 함께 사용하십시오. 다음과 같이 : sha1sum somefile.txt | 컷 -f1 -d \ | xxd -r -p | base64
fschmitt

@ fschmitt : 답변을 게시하기 전에이 의견을 읽어야합니다. 훨씬 깨끗합니다. 답변으로 게시하는 것을 고려해야합니다. 나는 그것에 투표했다.
Steven D

더 알렉스 대답입니다. 방금 "16 진수 이진 유닉스 변환"으로 봤습니다. 알렉스, xxd 전화를 포함하도록 답변을 수정 해 주시면 투표하겠습니다.
fschmitt 2016

내 답변을 수정했습니다. 지적 xxd해 주셔서 감사합니다 :)
alex

대단해! 이 문서에서 파악하기 힘들었다 httpd.apache.org/docs/2.4/misc/password_encryptions.html 은이 단계의 necessarity 언급 해달라고
phil294을

1

나는 당신이 원하는 것을 완전히 확신하지 못하지만 다음과 같은 것이 효과가 있다고 생각합니다.

$ 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예상되는 출력을 얻기 위해 형식 설정을 약간 사용해야 할 수도 있습니다.


1

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 5.10.1부터 b64digestbase64 출력을 채우지 않습니다. 패딩이 필요한 경우 가장 쉬운 방법은을 사용하는 것 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)'

펄을 사용한다면 Digest :: SHA 모듈 만 사용하면 base64로 직접 출력 할 수 있습니다.
xenoterracide

0

Base64로 인코딩 된 SHA256 해시는 최근 OpenBSD 에서 표준 파일 체크섬이되었습니다. OpenBSD (또는 sha1, sha512) 명령에 -b옵션을 추가 하기 만하면됩니다 sha256:

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

또는:

$ cksum -q -a sha256b $FILE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.