当前位置: 首页 > news >正文

go生成文件md5、sha1摘要简单示例

备注

go官方文档 https://pkg.go.dev/crypto/md5 已经给出如何使用该package生成文件或者字节数组的摘要值, 参照即可。 摘要值不是对文内容的加密,它主要用来进行checksum,就是验证两个文件内容是否一致,是否被篡改或者变化了。

简介

“crypto/sha256”
“crypto/md5”
“crypto/sha1”
根据文档介绍, 可直接通过如下方式对字节数据或者文件流进行摘要获取

对字节数据获取摘要

s := "Foo"md5 := 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/md5""encoding/hex""fmt""io""os"
)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.txt"md5Val, 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 := "要取摘要的字符串abc"md5Handle := 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))
}
http://www.lryc.cn/news/136261.html

相关文章:

  • Docker容器:docker数据管理、镜像的创建及dockerfile案例
  • Ajax fetch Axios 的区别
  • 数据库结构差异对比工具
  • Shell编程学习之breakcontinuereturn的应用
  • 有趣的数学 数学建模入门二 一些理论基础
  • Spring复习:(55)ApplicationContext中BeanFactoryPostProcessor是怎么添加到容器的?
  • 给wordpress添加关键词与描述
  • Verilog 入门
  • shell 简单且常用的几种
  • redis基本介绍以及在node中使用
  • React Native 文本输入基础知识
  • qt显示图片并转换成灰度图及伪彩图
  • oj在线编程输入输出
  • 【LeetCode 算法】Add Two Integers 两整数相加-位运算
  • 企业网络日志安全与 EventLog Analyzer
  • 清风数学建模——拟合算法
  • 单片机 (一) 让LED灯 亮
  • c++——单例模式
  • C# 流Stream详解(2)——FileStream、BinaryReader、MemorySream、SreamReader等之间的关系
  • 【JavaSE】详解final关键字
  • 问道管理:机器人概念走势活跃,新时达涨停,拓斯达、丰立智能等大涨
  • elementui 修改日期选择器el-date-picker样式
  • 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam
  • 数据可视化:图表绘制详解
  • 【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)
  • C#使用自定义的比较器对版本号(编码)字符串进行排序
  • AI在日常生活中的应用:从语音助手到自动驾驶
  • Windows10查看图片的分辨率
  • Spring事务和事务传播机制(2)
  • 计算机视觉 -- 图像分割