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))
}
相关文章:
go生成文件md5、sha1摘要简单示例
备注 go官方文档 https://pkg.go.dev/crypto/md5 已经给出如何使用该package生成文件或者字节数组的摘要值, 参照即可。 摘要值不是对文内容的加密,它主要用来进行checksum,就是验证两个文件内容是否一致,是否被篡改或者变化了。…...
Docker容器:docker数据管理、镜像的创建及dockerfile案例
文章目录 一、docker数据管理1.为何需要docker数据管理2.数据管理类型3.数据卷4.数据卷容器5.容器的互联 二.docker镜像的三种创建方法1.基于现有镜像创建1.1 启动镜像1.2 生成新镜像 2.基于本地模板创建2.1 OPENVZ 下载模板2.2 导入容器生成镜像 3.基于dockerfile创建3.1 dock…...
Ajax fetch Axios 的区别
AJAX:一种创建交互式网页应用的网页执行交互技术 通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。意味着:在不重新加载整个网页 的情况下,对网页某部分进行更新。 缺点: 针对MVC编程,…...
数据库结构差异对比工具
简介 前几年写了一个数据库对比工具,但是由于实现方式的原因,数据库支持有限,所以重新设计了一下,便于支持多种数据库,并且更新了UI。 新版地址:https://gitee.com/xgpxg/db-diff 旧版地址:h…...
Shell编程学习之breakcontinuereturn的应用
Shell编程中的break关键字:break关键字:退出最近的循环,后续循环不再执行;break关键字用法: break #结束本层循环 break 数字n #结束n层循环测试代码1: #!/bin/bashfor((i1;i<6;i)) dofor((…...
有趣的数学 数学建模入门二 一些理论基础
一、什么是数学建模? 现实世界中混乱的问题可以用数学来解决,从而产生一系列可能的解决方案来帮助指导决策。大多数人对数学建模的概念感到不舒服,因为它是如此开放。如此多的未知信息似乎令人望而却步。哪些因素最相关?但正是现实世界问题的…...
Spring复习:(55)ApplicationContext中BeanFactoryPostProcessor是怎么添加到容器的?
容器创建时会调用AbstractApplicationContext的refresh方法,其中会调用invokeBeanFactoryPostProcessor方法,如下图 invokeBeanFactoryPostProcessors代码如下: 其中调用的PostProcessorRegistrationDelegate的invokeBeanFactoryPostProcess…...
给wordpress添加关键词与描述
Wordpress网站的关键字及网页描述关系网站对搜索引擎的友好程度,如果自己手动加显然太折腾了,那如何让WordPress博客自动为每篇文章自动关键字及网页描述。每篇文章的内容不同,我们该如何让wordpress自动添加文章描述和关键词呢?下…...
Verilog 入门
Verilog 入门 本内容来自 牛客网Verilog入门特别版 1、一个没有输入和一个输出常数1的输出的电路,输出信号为one module top_module(one);output wire one;assign one 1b1; endmodule2、创建一个具有一个输入和一个输出的模块,其行为类似于电路上的连…...
shell 简单且常用的几种
目录 一、配置环境的shell脚本 二、系统资源脚本 一、要求 二、脚本内容 三、脚本解析 四、赋权并验证 三、查看当前内存的总大小、实际使用大小、剩余大小、显示使用率百分比的脚本 一、第一种方法 二、验证 三、第二种方法 四、验证 四、查看网卡实时流量脚本 一…...
redis基本介绍以及在node中使用
文章目录 引言一、什么是redis1. redis简介2. redis的特点3. redis的应用场景 二、redis在windows下安装1. 下载安装2.验证是否安装成功3. 配置环境变量 三、redis-cli常用命令介绍1. redis-cli2. keys *3. set key value4. get key5. exists key6. del key7. info8. flushdb9.…...
React Native 文本输入基础知识
在 React Native 中提供了一个文本输入组件TextInput。此组件主要是监听键盘输入事件,并把对应的输入值显示在组件中,此组件还提供了很多功能配置参数,例如自动更正、自动大写、占位符文本和不同的键盘类型(例如数字键盘ÿ…...
qt显示图片并转换成灰度图及伪彩图
写了个程序,可在途图片,并切换成灰度图及伪彩图显示,主要代码如下: #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainW…...
oj在线编程输入输出
练习地址:校招笔试真题_C工程师、golang工程师_牛客网 1.读取多行内容 输入描述: 输入包括两个正整数a,b(1 < a, b < 1000),输入数据包括多组。 输出描述: 输出ab的结果输入例子: 1 5 10 20 输出例子: 6 30imp…...
【LeetCode 算法】Add Two Integers 两整数相加-位运算
文章目录 Add Two Integers 两整数相加问题描述:分析代码递归 Tag Add Two Integers 两整数相加 问题描述: 给你两个整数 num1 和 num2,返回这两个整数的和。 − 100 < n u m 1 , n u m 2 < 100 -100 < num1, num2 < 100 −1…...
企业网络日志安全与 EventLog Analyzer
企业的网络日志安全是一项至关重要的任务。随着信息技术的迅猛发展,网络攻击和数据泄露的威胁也与日俱增。为了应对这些威胁,企业需要强大的工具来监控、分析和保护其网络日志。而ManageEngine的EventLog Analyzer正是这样一款卓越的解决方案。 网络日志…...
清风数学建模——拟合算法
拟合算法 文章目录 拟合算法概念 确定拟合曲线最小二乘法的几何解释求解最小二乘法matlab求解最小二乘法如何评价拟合的好坏计算拟合优度的代码 概念 在前面的篇幅中提到可以使用插值算法,通过给定的样本点推算出一定的曲线从而推算出一些想要的值。但存在一些问题…...
单片机 (一) 让LED灯 亮
一:硬件电路图 二:软件代码 #include "reg52.h"#define LED_PORT P2void main() {LED_PORT 0x01; // 0000 0001 D1 是灭的 } #include "reg52.h" 这个头文件的作用:包含52 系列单片机内部所有的功能寄存器 三&#…...
c++——单例模式
c单例模式 1、概念: 单例模式确保一个类只有一个实例,并提供一个全局访问点以获取该实例。这通常通过让类的构造函数为私有,以防止外部直接实例化,然后提供一个静态方法来获取实例。 2、实现方法: 实现单例模式的主…...
C# 流Stream详解(2)——FileStream、BinaryReader、MemorySream、SreamReader等之间的关系
【文件流】 电脑上的文件有很多,文本文件、音频文件、视频文件、图片文件等,这些文件会被持久化存储在磁盘上,其本质都是一堆二进制数据。 FileStream用于读取二进制文件。电脑上的所有文件,不管是文本、音频、视频还是其他任意…...
【JavaSE】详解final关键字
在Java中,final可以用来修饰类、方法和变量。final修饰类,表示该类无法被继承,并且此类的设计已被认为很完美而不需要进行修改或扩展。final修饰类中的方法,表示不可以被重写;也就是把该方法锁定了,以防止继…...
问道管理:机器人概念走势活跃,新时达涨停,拓斯达、丰立智能等大涨
机器人概念17日盘中走势活跃,到发稿,拓斯达大涨18%,昊志机电涨近16%,丰立智能涨超13%,步科股份、优德精细涨超10%,新时达涨停,天玑科技、兆龙互联、中大力德涨逾9%。 消息面上,8月16…...
elementui 修改日期选择器el-date-picker样式
1. 案例: 2. css /* 最外层颜色 */ .el-popper.is-pure {background: url("/assets/imgList/memuBG.png") no-repeat;border: none;background-size:100% 100%}/* 日期 1.背景透明 */ .el-date-picker{background: transparent; }/* 日期 2.标题、左右图…...
自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-@RequestParam
😀前言 自己实现 SpringMVC 底层机制 系列之-实现任务阶段 6-完成控制器方法获取参数-RequestParam 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,…...
数据可视化:图表绘制详解
数据可视化是一种将抽象的数字和数据转化为直观图形的技术,使数据的模式、趋势和关系一目了然。本文将详细介绍如何绘制各种类型的图表,包括柱状图、折线图、饼图、散点图和热力图等。 第一部分:图表类型和选择 1. 柱状图 柱状图是用于比较类…...
【中危】Apache Ivy<2.5.2 存在XXE漏洞 (CVE-2022-46751)
漏洞描述 Apache Ivy 是一个管理基于 ANT 项目依赖关系的开源工具,文档类型定义(DTD)是一种文档类型定义语言,它用于定义XML文档中所包含的元素以及元素之间的关系。 Apache Ivy 2.5.2之前版本中,当解析自身配置、Ivy 文件或 Apache Maven 的 POM 文件…...
C#使用自定义的比较器对版本号(编码)字符串进行排序
给定一些数据,如下所示: “1.10.1.1.1.2”, “1.1”, “2.2”, “1.1.1.1”, “1.1.3.1”, “1.1.1”, “2.10.1.1.1”, “1.1.2.1”, “1.2.1.1”, “2.5.1.1”, “1.10.1.1”, “1.10.2.1”, “1.11.3.1”, “1.11.12.1”, “1.11.11.1”, “1.11.3.1”, “1”, “…...
AI在日常生活中的应用:从语音助手到自动驾驶
文章目录 AI的定义和发展AI在日常生活中的应用1. **智能语音助手**2. **智能家居**3. **智能医疗**4. **自动驾驶** 代码示例:使用Python实现基于机器学习的图片分类AI的未来前景结论 🎉欢迎来到AIGC人工智能专栏~探索AI在日常生活中的应用 ☆* o(≧▽≦…...
Windows10查看图片的分辨率
文章目录 查看方法 查看方法 鼠标悬停在想查看分辨率大小的图片上,稍等那么零点几秒,就会弹出图片的分辨率信息,如图所示:...
Spring事务和事务传播机制(2)
前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和…...
芜湖做网站的邓健照片/广告公司注册
目录 图的存储方法 邻接表存储法详解 前向星和链式前向星 链式前向星 图论-链式前向星-删边操作 图的存储方法 邻接矩阵 即用二维数组实现,G[u][v]为<u,v>边的权值。邻接矩阵适用于存储稠密图,点不多而边很多的时候,邻接矩阵的优…...
赣州新闻发布会/seo优化排名工具
如何才能运营好一款棋牌游戏,是每个老板都着急想知道的事情,他们常常困惑于如何积累用户,如何带来流量,特别在棋牌游戏开发上线前期,由于经验不足、预判失误等情况,使得入不敷出,开始担惊受怕。…...
一念天堂免费观看/郴州seo
可能这样的面试场景比较常见:面试官:ConcurrentHashMap是怎么实现的呢?程序猿小僧:ConcurrentHashMap是线程安全的HashMap,基于分段锁实现,面试官:分段锁又是怎么实现的呢?程序员小僧…...
51自学网网站开发/百度客户管理系统登录
欢迎访问网易云社区,了解更多网易技术产品运营经验。2018年9月,网易云易盾宣布,与智能和自动化网络安全解决方案提供商A10 Networks结成战略合作伙伴关系。双方将在抗DDoS攻击领域展开深入合作,共同推出深度集成的联合解决方案&am…...
怎么向国外打广告/seo客服
这年代,做数据的,没人不知道 Spark 是什么吧。作为最火的大数据计算引擎,现在基本上是各互联网大厂的标配了。比如,字节跳动基于 Spark 构建的数据仓库,服务了几乎所有的产品线,包括抖音、今日头条、西瓜视…...
网站全站优化/公司推广策划
作者 | JiekeXu来源 | JiekeXu之路(ID: JiekeXu_IT)转载请联系授权 | (微信ID:xxq1426321293)大家好,我是 JiekeXu,很高兴又和大家见面了,今天分享下 Oracle 19c 之多租户 PDB 连接与访问。本文首发于微信公众号【Jiek…...