golang md5加密和python md5加密比较
python md5加密和golang md5加密各有不同,记录于此做备忘
Python 方法 md5
import base64 import hashlib def get_md5_data(body): """ md5加密 :param body_json: :return: """ md5lib = hashlib.md5() md5lib.update(body.encode("utf-8")) body_md5 = md5lib.digest() body_md5 = base64.b64encode(body_md5) return body_md5 if __name__ == "__main__": d = get_md5_data("woGo") print(d)
输出结果:
b'daK0g/biVYQtHOZt0PaoEQ=='
比较 hash.digest()
和 hash.hexdigest()
区别
hash.digest()
返回摘要,作为二进制数据字符串值
hash.hexdigest()
返回摘要,作为十六进制数据字符串值
import hashlib md5 = hashlib.md5() md5.update("a".encode('utf-8')) print(u"digest返回的摘要:%s"% md5.digest()) print(u"hexdigest返回的摘要:%s"% md5.hexdigest())
结果
digest返回的摘要:b'\x0c\xc1u\xb9\xc0\xf1\xb6\xa81\xc3\x99\xe2iw&a' hexdigest返回的摘要:0cc175b9c0f1b6a831c399e269772661
Golang方法 md5 和 sha512
package main import ( "crypto/md5" "crypto/sha512" "encoding/base64" "encoding/hex" "fmt" ) func main() { //fmt.Println(base64EncodeStr("2121")) //fmt.Println(md5Str("woGo")) //fmt.Println(sha512Str("woGo")) //fmt.Println(base64DecodeStr(base64EncodeStr("fd"))) // md5加密 has := md5.New() // 创建md5算法 has.Write([]byte("woGo")) // 写入需要加密的数据 b := has.Sum(nil) // 获取hash值字符切片;Sum函数接受一个字符切片,这个切片的内容会原样的追加到abc123加密后的hash值的前面,这里我们不需要这么做,所以传入nil fmt.Println(base64EncodeStr(string(b))) } //md5验证 func md5Str(src string) string { h := md5.New() h.Write([]byte(src)) // //fmt.Printf("%s\n", hex.EncodeToString(h.Sum(nil))) // 输出加密结果 return hex.EncodeToString(h.Sum(nil)) } //sha512验证 func sha512Str(src string) string { h := sha512.New() h.Write([]byte(src)) // //fmt.Printf("%s\n", hex.EncodeToString(h.Sum(nil))) // 输出加密结果 return hex.EncodeToString(h.Sum(nil)) } //base编码 func base64EncodeStr(src string) string { return string(base64.StdEncoding.EncodeToString([]byte(src))) } //base解码 func base64DecodeStr(src string) string { a, err := (base64.StdEncoding.DecodeString(src)) if err != nil { return "error" } return string(a) }
输出结果:
daK0g/biVYQtHOZt0PaoEQ==