教程集 www.jiaochengji.com
教程集 >  Golang编程  >  正文 go语言加解密算法 md5 sha256

go语言加解密算法 md5 sha256

发布时间:2021-12-10   编辑:jiaochengji.com
教程集为您提供go语言加解密算法 md5 sha256等资源,欢迎您收藏本站,我们将为您提供最新的go语言加解密算法 md5 sha256资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg><h1>MD5</h1> <ol><li>

md5介绍

md5的全称为md5信息摘要算法(MD5 Message-Digest Algorithm),是一种被广泛应用的密码散列函数,产生一个128位(16字节)的散列值,最常见的是32位的16进制表示,如:0caa3b23b8da53f9e4e041d95dc8fa2c,用以确保信息传输的完整一致。md5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的md5信息摘要,文件的md5类似于人的指纹,是世界上独一无二的,如果任何人对文件做了改动,其md5值也会发生变化。

md5与对称和非对称的加密算法不同,这两种密码是防止信息被窃取,而md5的目的是验证原文的完整性。

</li><li>

md5的特性

<ul><li>

不可逆

没有系统有办法知道md5原来的文字是什么

</li><li>

具有高度的离散性

md5码具有高度的散列性,没有规律可循,哪怕原信息只有一点点的变化,比如多个空格,那么就会导致md5发生巨大变化,也可以说产生的md5码是不可预测的

</li><li>

压缩性

任意长度的数据,算出的md5值得长度都是固定的。

</li><li>

弱碰撞性

已知原数据和其md5的值,想找到一个具有相同md5值得数据(即伪造数据)是非常困难的。

</li></ul></li><li>

md5的用途

<ul><li>

密码的加密存储

用户设置密码时,服务端只记录这个密码的MD5,而不记录密码本身,以后验证用户身份时,只需要将用户输入的密码再次做一下MD5后,与记录的MD5作一个比较即可验证其密码的合法性。

</li><li>

数字签名

比如发布一个程序,为了防止别人在你的程序里插入病毒或木马,你可以在发布这个程序的同时,公开这个程序文件的MD5码,这样别人只需要在任何地方下载这个程序后做一次MD5,然后跟公开的这个MD5作一个比较就知道这个程序是否被第三方修改过。

</li><li>

文件完整性验证

比如当下载一个文件时,服务器返回的信息中包括这个文件的md5,在本地下载完毕时进行md5,将两个md5值进行比较,如果一致则说明文件完整没有丢包现象

</li><li>

文件上传

比如百度云实现的秒传,就是对比你上传的文件md5在百度服务器是否已经存在了。

</li></ul></li><li>

注意事项

<ul><li> <h4>
同一个文件用不同的语言计算出来的md5一样吗?</h4>

只要算法正确,都是一样的。

</li><li> <h4>
拷贝的文件md5会改变吗?</h4>

不会。

</li><li> <h4>
还有什么其他的摘要算法么?</h4>

SHA-1,SHA-2(包括SHA-224,SHA-256,SHA-384)等

</li></ul></li></ol><h1>
SHA256</h1>

​ SHA256 是安全散列算法 SHA(Secure Hash Algorithm)系列算法之一,其摘要长度为256 bits,即32个字节,故称SHA256。SHA系列算法是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。

<ol><li>

字符串的哈希值

计算字符串的哈希值,一共分为3步:

<ol><li>sha256.New 2. Write中写入需要hash的内容 3. h.Sum生成hash值</li></ol></li></ol><pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">hashSHA256String</span><span class="token punctuation">(</span>input <span class="token builtin">string</span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">byte</span><span class="token punctuation">{</span> h <span class="token operator">:=</span> sha256<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span><span class="token punctuation">)</span> h<span class="token punctuation">.</span><span class="token function">Write</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token function">byte</span><span class="token punctuation">(</span>input<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">return</span> h<span class="token punctuation">.</span><span class="token function">Sum</span><span class="token punctuation">(</span><span class="token boolean">nil</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <ol><li>文件哈希值</li></ol><pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">hashSHA256File</span><span class="token punctuation">(</span>filePath <span class="token builtin">string</span><span class="token punctuation">)</span><span class="token punctuation">(</span><span class="token builtin">string</span><span class="token punctuation">,</span> <span class="token builtin">error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> hashValue <span class="token builtin">string</span> file<span class="token punctuation">,</span> err <span class="token operator">:=</span> os<span class="token punctuation">.</span><span class="token function">Open</span><span class="token punctuation">(</span>filePath<span class="token punctuation">)</span> <span class="token keyword">if</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"openfile error!"</span><span class="token punctuation">)</span> <span class="token keyword">return</span> hashValue<span class="token punctuation">,</span> err <span class="token punctuation">}</span> <span class="token keyword">defer</span> file<span class="token punctuation">.</span><span class="token function">Close</span><span class="token punctuation">(</span><span class="token punctuation">)</span> hash <span class="token operator">:=</span> sha256<span class="token punctuation">.</span><span class="token function">New</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token boolean">_</span><span class="token punctuation">,</span> err <span class="token operator">:=</span> io<span class="token punctuation">.</span><span class="token function">Copy</span><span class="token punctuation">(</span>hash<span class="token punctuation">,</span> file<span class="token punctuation">)</span><span class="token punctuation">;</span> err <span class="token operator">!=</span> <span class="token boolean">nil</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> hashValue<span class="token punctuation">,</span> err <span class="token punctuation">}</span> hashInBytes <span class="token operator">:=</span> hash<span class="token punctuation">.</span><span class="token function">Sum</span><span class="token punctuation">(</span><span class="token boolean">nil</span><span class="token punctuation">)</span> hashValue <span class="token operator">=</span> hex<span class="token punctuation">.</span><span class="token function">EncodeToString</span><span class="token punctuation">(</span>hashInBytes<span class="token punctuation">)</span> <span class="token keyword">return</span> hashValue<span class="token punctuation">,</span> <span class="token boolean">nil</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“go语言加解密算法 md5 sha256”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
go语言加解密算法 md5 sha256
Go从入门到精通系列视频之go编程语言密码学哈希算法
c# 实现MD5,SHA1,SHA256,SHA512等加密算法的代码
Go从入门到精通系列视频之go编程语言密码学哈希算法(二)
Python常用模块之hashlib
【go密码学】-非对称加密算法
php加密函数md5,crypt,base64_encode的用法介绍
Go hash算法的支持
php怎么给密码进行md5加密
go随聊-消息摘要算法MD5

[关闭]
~ ~