当前位置: 首页 > 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))
}

相关文章:

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关键字&#xff1a;break关键字&#xff1a;退出最近的循环&#xff0c;后续循环不再执行&#xff1b;break关键字用法&#xff1a; break #结束本层循环 break 数字n #结束n层循环测试代码1&#xff1a; #!/bin/bashfor((i1;i<6;i)) dofor((…...

有趣的数学 数学建模入门二 一些理论基础

一、什么是数学建模? 现实世界中混乱的问题可以用数学来解决&#xff0c;从而产生一系列可能的解决方案来帮助指导决策。大多数人对数学建模的概念感到不舒服&#xff0c;因为它是如此开放。如此多的未知信息似乎令人望而却步。哪些因素最相关&#xff1f;但正是现实世界问题的…...

Spring复习:(55)ApplicationContext中BeanFactoryPostProcessor是怎么添加到容器的?

容器创建时会调用AbstractApplicationContext的refresh方法&#xff0c;其中会调用invokeBeanFactoryPostProcessor方法&#xff0c;如下图 invokeBeanFactoryPostProcessors代码如下&#xff1a; 其中调用的PostProcessorRegistrationDelegate的invokeBeanFactoryPostProcess…...

给wordpress添加关键词与描述

Wordpress网站的关键字及网页描述关系网站对搜索引擎的友好程度&#xff0c;如果自己手动加显然太折腾了&#xff0c;那如何让WordPress博客自动为每篇文章自动关键字及网页描述。每篇文章的内容不同&#xff0c;我们该如何让wordpress自动添加文章描述和关键词呢&#xff1f;下…...

Verilog 入门

Verilog 入门 本内容来自 牛客网Verilog入门特别版 1、一个没有输入和一个输出常数1的输出的电路&#xff0c;输出信号为one module top_module(one);output wire one;assign one 1b1; endmodule2、创建一个具有一个输入和一个输出的模块&#xff0c;其行为类似于电路上的连…...

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。此组件主要是监听键盘输入事件&#xff0c;并把对应的输入值显示在组件中&#xff0c;此组件还提供了很多功能配置参数&#xff0c;例如自动更正、自动大写、占位符文本和不同的键盘类型&#xff08;例如数字键盘&#xff…...

qt显示图片并转换成灰度图及伪彩图

写了个程序&#xff0c;可在途图片&#xff0c;并切换成灰度图及伪彩图显示&#xff0c;主要代码如下&#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainW…...

oj在线编程输入输出

练习地址&#xff1a;校招笔试真题_C工程师、golang工程师_牛客网 1.读取多行内容 输入描述&#xff1a; 输入包括两个正整数a,b(1 < a, b < 1000),输入数据包括多组。 输出描述&#xff1a; 输出ab的结果输入例子&#xff1a; 1 5 10 20 输出例子&#xff1a; 6 30imp…...

【LeetCode 算法】Add Two Integers 两整数相加-位运算

文章目录 Add Two Integers 两整数相加问题描述&#xff1a;分析代码递归 Tag Add Two Integers 两整数相加 问题描述&#xff1a; 给你两个整数 num1 和 num2&#xff0c;返回这两个整数的和。 − 100 < n u m 1 , n u m 2 < 100 -100 < num1, num2 < 100 −1…...

企业网络日志安全与 EventLog Analyzer

企业的网络日志安全是一项至关重要的任务。随着信息技术的迅猛发展&#xff0c;网络攻击和数据泄露的威胁也与日俱增。为了应对这些威胁&#xff0c;企业需要强大的工具来监控、分析和保护其网络日志。而ManageEngine的EventLog Analyzer正是这样一款卓越的解决方案。 网络日志…...

清风数学建模——拟合算法

拟合算法 文章目录 拟合算法概念 确定拟合曲线最小二乘法的几何解释求解最小二乘法matlab求解最小二乘法如何评价拟合的好坏计算拟合优度的代码 概念 在前面的篇幅中提到可以使用插值算法&#xff0c;通过给定的样本点推算出一定的曲线从而推算出一些想要的值。但存在一些问题…...

单片机 (一) 让LED灯 亮

一&#xff1a;硬件电路图 二&#xff1a;软件代码 #include "reg52.h"#define LED_PORT P2void main() {LED_PORT 0x01; // 0000 0001 D1 是灭的 } #include "reg52.h" 这个头文件的作用&#xff1a;包含52 系列单片机内部所有的功能寄存器 三&#…...

c++——单例模式

c单例模式 1、概念&#xff1a; 单例模式确保一个类只有一个实例&#xff0c;并提供一个全局访问点以获取该实例。这通常通过让类的构造函数为私有&#xff0c;以防止外部直接实例化&#xff0c;然后提供一个静态方法来获取实例。 2、实现方法&#xff1a; 实现单例模式的主…...

C# 流Stream详解(2)——FileStream、BinaryReader、MemorySream、SreamReader等之间的关系

【文件流】 电脑上的文件有很多&#xff0c;文本文件、音频文件、视频文件、图片文件等&#xff0c;这些文件会被持久化存储在磁盘上&#xff0c;其本质都是一堆二进制数据。 FileStream用于读取二进制文件。电脑上的所有文件&#xff0c;不管是文本、音频、视频还是其他任意…...

绝区零一条龙自动化工具:从机械操作到智能游戏的进化指南

绝区零一条龙自动化工具&#xff1a;从机械操作到智能游戏的进化指南 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 当你第…...

Ventoy进阶玩法:给你的万能启动盘加上‘软件商店’和自动菜单(附配置脚本)

Ventoy终极定制指南&#xff1a;打造智能启动盘的进阶技巧 每次面对一堆零散的ISO文件时&#xff0c;你是否也幻想过能有一个像手机应用商店那样井井有条的启动盘&#xff1f;Ventoy作为开源启动盘解决方案&#xff0c;其潜力远不止于"扔进去就能用"的基础功能。本文…...

AnimateDiff文生视频零基础入门:5分钟学会用文字生成动态GIF

AnimateDiff文生视频零基础入门&#xff1a;5分钟学会用文字生成动态GIF 1. 为什么选择AnimateDiff作为文生视频的起点&#xff1f; 如果你曾经尝试过AI视频生成工具&#xff0c;可能会被复杂的操作流程和硬件要求劝退。传统方案往往需要你先准备一张静态图片&#xff0c;再通…...

别再用默认规划器了!手把手教你为TurtleBot3在ROS2 Humble上写个自己的导航大脑

别再用默认规划器了&#xff01;手把手教你为TurtleBot3在ROS2 Humble上写个自己的导航大脑 当TurtleBot3在狭窄走廊里反复撞墙&#xff0c;或者面对动态障碍物时反应迟钝&#xff0c;大多数开发者首先想到的是调整Nav2的默认参数。但真正的高手都知道——与其在有限的黑箱参数…...

CAN总线故障诊断与维修全指南

经典CAN总线现场故障分析与诊断指南1. CAN总线故障概述1.1 常见故障现象当CAN总线系统出现传输异常时&#xff0c;通常会表现为多种复合故障现象&#xff0c;包括但不限于&#xff1a;仪表板显示异常车辆启动/熄火功能失效动力系统性能下降特定电控模块功能丧失这些现象的根本原…...

三线OS突破20个月!科伦博泰TROP2 ADC在肺癌红海杀出重围

肺癌&#xff0c;历来是全球肿瘤研发领域产出最丰富、竞争也最残酷的“兵家必争之地”。 从开启靶向时代的EGFR-TKI&#xff0c;到重塑治疗格局的PD-(L)1免疫疗法&#xff0c;再到如今势头迅猛的双抗与ADC&#xff0c;各类技术路线持续涌入这一数百亿美元规模的治疗市场123。创…...

眼图原理与信号完整性分析技术详解

眼图原理与信号完整性分析技术 1. 眼图基础概念 1.1 眼图定义与形成机制 眼图是通过示波器余辉作用将扫描所得的每个码元波形重叠形成的图形。当使用示波器跨接在接收滤波器输出端&#xff0c;并调整扫描周期与接收码元周期同步时&#xff0c;屏幕上显示的图形因其形似人眼而…...

espeak-ng语音合成引擎:多语言语音包高效管理完全指南

espeak-ng语音合成引擎&#xff1a;多语言语音包高效管理完全指南 【免费下载链接】espeak-ng espeak-ng: 是一个文本到语音的合成器&#xff0c;支持多种语言和口音&#xff0c;适用于Linux、Windows、Android等操作系统。 项目地址: https://gitcode.com/GitHub_Trending/e…...

Coze智能客服部署指南:从零搭建到生产环境最佳实践

最近在折腾智能客服系统的部署&#xff0c;发现市面上虽然方案不少&#xff0c;但真正能兼顾快速落地、稳定运行和成本可控的并不多。Coze 作为一个新兴的选项&#xff0c;以其灵活的架构和不错的性能吸引了我。经过一番从零到生产环境的摸索&#xff0c;我总结了一套部署指南&…...

如何快速上手ESP-ADF:从零开始构建智能音频项目

如何快速上手ESP-ADF&#xff1a;从零开始构建智能音频项目 【免费下载链接】esp-adf Espressif Audio Development Framework 项目地址: https://gitcode.com/gh_mirrors/es/esp-adf ESP-ADF&#xff08;Espressif Audio Development Framework&#xff09;是乐鑫为ESP…...