-
끝에 추가 하지 않고 SHA 합계를 인쇄할 수 있습니까 ?
$ echo test | sha1sum
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83 - <--- this "-" dash/hyphen
awk
다른 명령줄 도구를 사용할 수 있다는 것을 알고 있지만다른 도구를 사용하지 않고도 할 수 있나요??
$ echo test | sha1sum | awk '{print $1}'
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
답변1
sha1sum 해시의 길이는 40자이므로 출력을 head 명령으로 파이프하고 처음 40자를 추출할 수 있습니다.
echo test | sha1sum | head -c 40
답변2
이는 다른 도구가 없거나 실제 sha1sum 스크립트/바이너리를 편집하지 않고는 불가능합니다. sha1sum이 파일에 입력되면 합계 뒤에 파일 이름이 인쇄됩니다. sha1sum이 파일과 함께 제공되지 않거나 파이프와 함께 사용되는 경우. - 입력이 파일이 아님을 나타내기 위해 자리 표시자로 사용됩니다.
답변3
Bash에는 추가 도구가 없습니다.
h=($(echo test | sha1sum )) ;echo $h
4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
또는
h=( `echo test | sha1sum` ) ;echo $h
Bash에서는 h의 "배열" 선언을 사용하여 태그가 지정된 다중 인덱스 배열을 만듭니다. 변수를 참조하기 위해 $h를 사용하여 배열을 다시 색인화하는 것은 ${h[0]}과 동일합니다.
기본 쉘 교체 사용
h=`echo test | sha1sum` ;echo ${h// */}
또는 posix 쉘(sh, dash, bash)을 사용하여 접미사 제거%
h=`echo test | sha1sum` ;echo ${h%-}
배열을 사용하는 것이 더 직관적인 옵션이지만 작동할 수도 있습니다.
Base64 추가
xxd + base64를 사용하여 인쇄 가능한 문자 범위에서 엔트로피를 증가(비트 수 감소)할 수 있습니다.
h=($(echo test | sha1sum )) ;echo $h|xxd -r -p |base64
ThJDvSLGbnbCup7dwfkTlOV/n4M=
답변4
아무도 이것을 언급하지 않은 것이 이상해 보이지만 "tr" 명령을 사용하여 출력을 다듬는 것이 가장 쉽다는 것을 알았습니다. bash/perl/python 정규식에 대한 내용은 없지만 5분 동안 인터넷 검색 없이는 얻을 수 없습니다.
$ echo -n "hello" | sha256sum | tr -d "\n *-"
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824