CGI 输出 Shell - md5sum 值错误

CGI output Shell - md5sum wrong value

我需要将 IPv4 地址拆分为八位字节,计算每个八位字节的 MD5 哈希值并打印为 CGI 输出:

IP1=$(echo ${REMOTE_ADDR} | tr "." " " | awk '{print '} | md5sum | cut -c1-32)
printf $IP1

在这个例子中,REMOTE_ADDR = 192.168.20.100 但是192的MD5给了我一个错误的MD5 IP1=6be7de648baa9067fa3087928d5ab0b4,而它应该是58a2fc6ed39fd083f55d4182bf88826d

如果我这样做:

cat /tmp/test.txt | md5sum | cut -c1-32

其中 test.txt 包含 192, 我得到正确的 MD5 哈希,即 58a2fc6ed39fd083f55d4182bf88826d

我做错了什么?

您的 awkprint 正在添加换行符,因此您计算的是 "192\n" 的 md5,而不是 "192"。使用

IP1=$(printf "%s" "${REMOTE_ADDR%.*.*.*}" | md5sum | cut -c1-32)

相反,它使用 shell 参数扩展来删除 IP 地址的第一个八位字节以外的所有内容,并使用 printf 在没有换行符的情况下写入它。

正如@Shawn 所说,问题出在 awk 打印上。

添加 tr -d '\n' 解决了问题。

现在它工作正常;对于其他八位字节,我不得不在 awk

上更改 print $2..etc
IP1=$(echo ${REMOTE_ADDR} | awk -F. '{print '} | tr -d '\n' | md5sum | cut -c1-32 )