台州的网站建设,东莞网站设计找谁,陕西省交通建设厅网站,做网站需要买空间么 服务器备注
go官方文档 https://pkg.go.dev/crypto/md5 已经给出如何使用该package生成文件或者字节数组的摘要值#xff0c; 参照即可。 摘要值不是对文内容的加密#xff0c;它主要用来进行checksum#xff0c;就是验证两个文件内容是否一致#xff0c;是否被篡改或者变化了。…备注
go官方文档 https://pkg.go.dev/crypto/md5 已经给出如何使用该package生成文件或者字节数组的摘要值 参照即可。 摘要值不是对文内容的加密它主要用来进行checksum就是验证两个文件内容是否一致是否被篡改或者变化了。
简介
“crypto/sha256” “crypto/md5” “crypto/sha1” 根据文档介绍 可直接通过如下方式对字节数据或者文件流进行摘要获取
对字节数据获取摘要
s : Foomd5 : md5.Sum([]byte(s))
sha1 : sha1.Sum([]byte(s))
sha256 : sha256.Sum256([]byte(s))fmt.Printf(%x\n, md5)
fmt.Printf(%x\n, sha1)
fmt.Printf(%x\n, sha256)对文件取摘要值示例。 将如下示例代码中的sha256.New() 替换为h : sha1.New() 即可获取sha1值 通过fmt.Printf(“%x\n”, sum)获取摘要值的字符串 也可以通过hex.EncodeToString(md5Byte) 将摘要值encode为可以打印的字符串。
func main() {f, err : os.Open(file.txt)if err ! nil {log.Fatal(err)}defer f.Close()h : sha256.New()if _, err : io.Copy(h, f); err ! nil {log.Fatal(err)}fmt.Printf(%x, h.Sum(nil))
}示例代码
package mainimport (crypto/md5encoding/hexfmtioos
)func calcFileMD5(filePath string) (string, error) {file, err : os.Open(filePath)if err ! nil {return , err}md5Handle : md5.New()_, _ io.Copy(md5Handle, file)md5Byte : md5Handle.Sum(nil) //计算 MD5 值返回 []bytemd5str : fmt.Sprintf(%x, md5Byte) //将 []byte 转为 stringfmt.Printf(md5Byte:%v, md5str:%v\n, md5Byte, md5str)return hex.EncodeToString(md5Byte), nil
}func main() {dir, err : os.Getwd()if err ! nil {fmt.Println(Error getting current directory: , err)return}fmt.Println(Current dir: , dir)var fileName file1.txtmd5Val, err : calcFileMD5(fileName)if err ! nil {fmt.Printf(fail to calc md5 for file %v, errMsg:%v\n, fileName, err)} else {fmt.Printf(md5 for file %v is %v\n, fileName, md5Val)}fmt.Println(字符串的md5值demo)str : 要取摘要的字符串abcmd5Handle : md5.New()_, err io.WriteString(md5Handle, str)if err ! nil {fmt.Printf(fail to calc md5 for string %v is errMsg:%v\n, str, err)return}md5ValByte : md5Handle.Sum(nil)// 输出16进制格式的MD5字符串fmt.Printf(%x\n, md5ValByte)md5str : hex.EncodeToString(md5ValByte)fmt.Printf(md5 for string %v is %v. lenght:%d\n, str, md5str, len(md5ValByte))fmt.Println(byte 数组的md5值demo)dataByte : []byte(要取摘要的数据) // 将字符串转换为byte数组md5Val16Byte : md5.Sum(dataByte) // 对data进行MD5哈希计算// 输出16进制格式的MD5字符串fmt.Printf(%x\n, md5Val16Byte)sliceFrom16ByteArray : md5Val16Byte[:]md5str hex.EncodeToString(sliceFrom16ByteArray)fmt.Printf(md5 for byte[] %v is %v. lenght:%d\n, dataByte, md5str, len(md5Val16Byte))
}