go
- 前两段hash 的结果相同
- 空的hash 结果并不为空,而是
d41d8cd98f00b204e9800998ecf8427e
- sum 的作用比较奇怪:其实只是把参数加到当前hash 值的前面作为结果输出,并不改变hash的状态。唯一参数不为空的情形是: 需要把每个hash块的值连起来.所以实际使用中几乎遇不到sum的参数不是nil的情况
func test_hash(){
h:=md5.New()
h.Write([]byte("aaa"))
h.Write([]byte("bbb"))
fmt.Printf("%x\n",h.Sum(nil))
fmt.Println(base64.StdEncoding.EncodeToString(h.Sum(nil)))
h2:=md5.New()
h2.Write([]byte("aaabbb"))
fmt.Printf("%x\n",h2.Sum(nil))
fmt.Println(base64.StdEncoding.EncodeToString(h2.Sum(nil)))
h3:=md5.New()
fmt.Printf("%x\n",h3.Sum(nil))
fmt.Printf("%x\n",h3.Sum([]byte("\x00\x00\x00")))
fmt.Println(base64.StdEncoding.EncodeToString(h3.Sum(nil)))
fmt.Println(base64.StdEncoding.EncodeToString(h3.Sum([]byte("\x00\x00\x00"))))
}
python
import md5
src = 'aaabbb'
m1 = md5.new()
m1.update(src)
print m1.hexdigest()
import hashlib
src = 'aaabbb'
m2 = hashlib.md5()
m2.update(src)
print m2.hexdigest()
- Unicode-objects must be encoded before hashing
import hashlib
src = 'aaabbb'
m2 = hashlib.md5()
m2.update(src.encode('utf-8'))
print m2.hexdigest()