golang中的md5、sha256数据加密文件md5/sha256值计算步骤和运行内存图解

在go语言中对数据计算一个md5,或sha256和其他语言 如java, php中的使用方式稍有不同, 那就是要加密的数据必须通过的形式写入到你创建的Hash对象中

Hash数据加密步骤

1. 先使用对应的加密算法包中的New函数创建一个Hash对象,(这个也就是一个io.Writer) ;

        如: sha := md5.New()

2.  将要计算MD5/sha256的数据或者文件写入这个writer;

        如:io.WriteString(sha, "admin") 

        文件hash计算:

        file,_:=os.Open("yourfile.txt")

        io.Copy(sha, file)  // 文件hash计算和字符串hash计算的区别就在这里,其他地方完全一样

3. 最后在调用hash对象的方法Sum方法即可计算文件或者数据的MD5值;

        如: b0 := sha.Sum(nil)  // 注意这个Sum方法对于计算Hash值时不需要传参数,给他个nil 哄一下就行

4.  返回值b0,这个值是16进制的unicode表示,需要使用 %x 将其格式化为可读字符串.

        如: md5Str:=fmt.Sprintf("%x",b0)     

到此,整个hash加密过程就算完成了, 怎么样是不是很简单?

go语言中的其他Hash加密算法, 如 sha1, sha256, sha512等的加密步骤和方法也都是一样的,唯一不同的地方就是在创建Hash对象的时候你使用的包名不一样而已。

对于文件的hash值计算,

方法也是一样的, 不同的地方就是在数据写入的时候,把 io.WriteString(sha, "admin")  替换为  io.Copy(sha, file)  这里的file是你使用打开的要计算hash的文件对象指针,在这个地方被当做一个reader

Hash对象运行内存图解

上图可以帮助我们验证go语言中的数据加密的运行方式,流式数据写入, 还有hash对象中的这个Sum方法参数在对数据进行加密的时候 为什么必须为nil

Hash对象运行内存图解中的代码: 这个是一个example测试用例,保存到 xxx_test.go 即可运行

package testimport ("crypto/md5""fmt""io"
)func ExampleMd5() {sha := md5.New()io.WriteString(sha, "admin") // 这里要计算MD5的字符串必须要以流的显示写入到hash对象中b0 := sha.Sum(nil)           // 字节放到Sum参数里面最会将数据追加到流的前面返回,不会影响hash对象的数据.// 验证fmt.Printf("admin对应的md5字节: %v 字符串: %x \n", b0, b0)b1 := sha.Sum([]byte("ab中")) // 这里传递的参数不会影响hash对象,仅附加到数据流的前面//Sum方法里面追加的参数 ab中 被转换为 97 98 228 184 173 , 可见这里的97就是a的码值,98是b的码值,而 228 184 173 则是中对应的码值因为一个汉字占3个字节所以这里有3个bytefmt.Printf(`Sum([]byte("admin"))后字节: %v 字符串: %x`, b1, b1)// output:// admin对应的md5字节: [33 35 47 41 122 87 165 167 67 137 74 14 74 128 31 195] 字符串: 21232f297a57a5a743894a0e4a801fc3// Sum([]byte("admin"))后字节: [97 98 228 184 173 33 35 47 41 122 87 165 167 67 137 74 14 74 128 31 195] 字符串: 6162e4b8ad21232f297a57a5a743894a0e4a801fc3
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/17864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetCode. 85. 最大矩形

leetCode. 85. 最大矩形 部分参考上一题链接 leetCode.84. 柱状图中最大的矩形 此题思路 代码 class Solution { public:int largestRectangleArea( vector<int>& h ) {int n h.size();vector<int> left( n ), right( n );stack<int> st;// 求每个矩形…

vue/uniapp 企业微信H5使用JS-SDK

企业微信H5需要我们使用一些SDK方法如获取外部联系人userid 获取当前外部联系人userid 使用SDK前提是如何通过config接口注入权限验证配置 使用说明 - 接口文档 - 企业微信开发者中心 当前项目是vue项目&#xff0c;不好直接使用 引入JS文件&#xff0c;但我们可以安装依赖…

使用nexus搭建的docker私库,定期清理无用的镜像,彻底释放磁盘空间

一、背景 我们使用nexus搭建了docker镜像&#xff0c;随着推送的镜像数量越来越多&#xff0c;导致nexus服务器的磁盘空间不够用了。于是&#xff0c;我们急需先手动删除一些过期的镜像&#xff0c;可发现磁盘空间并没有释放。 那么&#xff0c;如何才能彻底释放掉呢&#xff…

FreeRTOS学习 -- 任务 API 函数

函数 uxTaskPriorityGet() 此函数用来查询指定任务的优先级&#xff0c;要使用此函数的话宏 INCLUDE_uxTaskPriorityGet 应该定义为 1。 函数 vTaskPrioritySet() 此函数用于改变某一个任务的任务优先级&#xff0c;要 使 用 此 函 数 的 话 宏 INCLUDE_vTaskPrioritySet 应…

一维数组操作(GOC常考类型)答案

第1题 宇航局招聘 时限&#xff1a;1s 空间&#xff1a;256m 宇航局准备招收一批科研人员从事月球探索的航空科研工作。这个职位来了很多应聘者&#xff0c;宇航局对众多应聘者进行综合素质考试&#xff0c;最终会选出x名综合得分排名靠前应聘者。目前考试已经结束了&a…

Golang | Leetcode Golang题解之第102题二叉树的层序遍历

题目&#xff1a; 题解&#xff1a; func levelOrder(root *TreeNode) [][]int {ret : [][]int{}if root nil {return ret}q : []*TreeNode{root}for i : 0; len(q) > 0; i {ret append(ret, []int{})p : []*TreeNode{}for j : 0; j < len(q); j {node : q[j]ret[i] …

Java面试精粹:高级问题与解答集锦(一)

Java 面试问题及答案 1. 什么是Java的垃圾回收机制&#xff0c;它如何工作&#xff1f; 答案&#xff1a; Java的垃圾回收机制是一种自动内存管理功能&#xff0c;用于回收不再被应用程序使用的对象所占用的内存。它通过垃圾收集器&#xff08;Garbage Collector&#xff0c;…

js数据类型显隐式转换

在JavaScript中&#xff0c;数据类型的转换可以分为两种主要类型&#xff1a;显式类型转换&#xff08;Explicit Type Conversion&#xff09;和隐式类型转换&#xff08;Implicit Type Conversion 或 Type Coercion&#xff09;。 显式类型转换&#xff08;Explicit Type Con…

React18+TypeScript搭建通用中后台项目实战02 整合 antd 和 axios

配置路径别名 tsconfig.json {"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"lib": ["ES2020","DOM","DOM.Iterable"],"module": "ESNext&quo…

磁盘分区和挂载

磁盘分区和挂载 一、磁盘 业务层面&#xff1a;满足一定的需求所是做的特定操作 硬盘是什么以及硬盘的作用 硬盘&#xff1a;计算器的存储设备&#xff0c;一个或者多个磁性的盘片做成&#xff0c;可以在盘片上进行数据的读写 连接方式&#xff1a;内部设备&#xff0c;外…

深度揭秘:蓝海创意云渲染农场的五大特色功能

在当今数字化时代&#xff0c;影视制作、效果图设计等领域对于高质量的渲染需求日益增长。在这个背景下&#xff0c;云渲染平台成为了行业中不可或缺的一部分&#xff0c;它为用户提供了高效、灵活的渲染解决方案。蓝海创意云渲染农场https://www.vsochina.com/cn/render蓝海创…

软件需求分析和软件原型开发是一会事情吗?

软件需求分析和软件原型开发是软件开发过程中的两个重要环节&#xff0c;它们各自承担着不同的任务&#xff0c;但又紧密相连&#xff0c;共同影响着软件项目的成功。下面将详细解释这两个环节的定义、目的以及它们之间的关系。 一、软件需求分析 定义&#xff1a;软件需求分析…

C++学习日记 | LAB 6 static library 静态库

资料来源&#xff1a;南科大 余仕琪 C/C Program Design LINK&#xff1a;CPP/week06 at main ShiqiYu/CPP GitHub 一、本节内容 本节主要介绍静态库和动态库。 1.1 静态库和动态库的概念 静态链接和静态库(也称为存档)是链接器将所有使用的库函数复制到可执行文件的结果。静…

Javascript中的定时器有哪些?他们的区别及用法是什么?

JavaScript 中有几种常用的定时器函数,它们的区别主要在于执行方式和行为: setTimeout(callback, delay):作用:在指定的延迟时间后执行回调函数一次。用法:通常用于延迟执行某些操作。返回值:一个定时器 ID,可用于取消定时器。setInterval(callback, delay):作用:每隔指定的延…

Linux中 “权限设置修改”

目录 一、权限 &#xff08;1&#xff09;权限三大类&#xff1a; &#xff08;2&#xff09;文件的权限&#xff1a; &#xff08;3&#xff09;目录的权限&#xff1a; &#xff08;4&#xff09;用户的角色&#xff1a; 二、文件的权限位 三、修改用户权限 &#xf…

【flutter 双端开发】

flutter 双端开发 开发小细节替换新的logo 开发小细节 替换新的logo 替换双端logo 寻找三方插件 android 打包流程 android 打包流程2

小程序唯品会Authorization sign

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

Python---Matplotlib(2万字总结)【从入门到掌握】

数据可视化 在完成了对数据的透视之后&#xff0c;可以将数据透视的结果通过可视化的方式呈现出来&#xff0c;简单的说&#xff0c;就是将数据变成漂亮的图表&#xff0c;因为人类对颜色和形状会更加敏感&#xff0c;然后再进一步解读数据背后隐藏的价值。在之前的文章中已经…

nacos安装与使用

1.nacos简介与安装 什么是注册中心&#xff08;服务治理&#xff09; 服务注册&#xff1a;服务提供者provider&#xff0c;启动的时候向注册中心上报自己的网络信息 服务发现&#xff1a;服务消费者consumer&#xff0c;启动的时候向注册中心上报自己的网络信息&#xff0c;拉…

JavaScript style 样式属性操作

JavaScript 中可以使用 style 对象来操作元素的样式属性。style 对象是元素的一个属性&#xff0c;通过它可以访问和修改元素的内联样式属性。 要访问元素的样式属性&#xff0c;可以使用以下语法&#xff1a; element.style.property 其中&#xff0c;element 是要操作的元…