Python 2.7.9版
uname-a:Linux kali 4.0.0-kali1-amd64 #1 SMP Debian 4.0.4-1+kali2 (2015-06-03) x86_64 GNU/Linux
python代码:
#!/usr/bin/python
import hashlib
import base64
def f( msg ):
print 'f():'
print 'msg: ' + msg
m = hashlib.md5()
m.update( msg )
print 'm.hexdigest(): ' + str( m.hexdigest() )
print 'm.digest(): ' + str( m.digest() )
b64 = base64.b64encode( m.digest() )
print 'b64: ' + str( b64)
msg="hello"
f(msg)
msg='{"HelloId": 2}'
f(msg)
msg='{"HelloHelloId": 2}'
f(msg)
bash代码:
#!/bin/bash
f(){
echo 'f():'
msg="$@"
echo "msg: $msg"
md5="$(echo -n $msg | openssl dgst -md5 -binary)"
md5_hex="$(echo -n $msg | openssl dgst -md5 | awk '{print $2}')"
echo "m.hexdigest(): $md5_hex"
echo "m.digest(): $md5"
b64=$(echo -n "${md5}" | python -c 'import base64; import sys; print base64.b64encode( sys.stdin.read() ),')
echo "b64: $b64"
}
msg="hello"
f $msg
msg='{"HelloId": 2}'
f $msg
msg='{"HelloHelloId": 2}'
f $msg
似乎纯python是对的,它是哈希和中最新的0:
python输出:
$ python base64_test.py
f():
msg: hello
m.hexdigest(): 5d41402abc4b2a76b9719d911017c592
m.digest(): ]A@*�K*v�q��Œ
b64: XUFAKrxLKna5cZ2REBfFkg==
f():
msg: {"HelloId": 2}
m.hexdigest(): 7a6c4e0b7be519c95941fc0018581ae0
m.digest(): zlN
{��YA�X�
b64: emxOC3vlGclZQfwAGFga4A==
f():
msg: {"HelloHelloId": 2}
m.hexdigest(): 72dc42e42036d7068010b2598780ab2d
m.digest(): r�B� 6���Y���-
b64: ctxC5CA21waAELJZh4CrLQ==
bash输出:
$ bash base64_test.sh
f():
msg: hello
m.hexdigest(): 5d41402abc4b2a76b9719d911017c592
m.digest(): ]A@*�K*v�q��Œ
b64: XUFAKrxLKna5cZ2REBfFkg==
f():
msg: {"HelloId": 2}
m.hexdigest(): 7a6c4e0b7be519c95941fc0018581ae0
m.digest(): zlN
{��YA�X�
b64: emxOC3vlGclZQfwYWBrg
f():
msg: {"HelloHelloId": 2}
m.hexdigest(): 72dc42e42036d7068010b2598780ab2d
m.digest(): r�B� 6���Y���-
b64: ctxC5CA21waAELJZh4CrLQ==
看一看
"hello"
-两者相等
'{"HelloId": 2}'
-错误的最新base64。但是md5哈希的摘要是相等的
'{"HelloHelloId": 2}'
-再次相等
它不是空格或大写字母或其他类似的东西
似乎,它是第二个哈希...c0018581ae0
中的最新0。如何保持这个0
问题在于bash无法在变量中保留二进制
null
字符简单地说,bash不能使用二进制文件
解决方案:
意味着,不需要将二进制存储在变量中,只需通过管道将其推送到end-base64输出
相关问题 更多 >
编程相关推荐