教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Go hash算法的支持

Go hash算法的支持

发布时间:2021-12-20   编辑:jiaochengji.com
教程集为您提供Go hash算法的支持等资源,欢迎您收藏本站,我们将为您提供最新的Go hash算法的支持资源
<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>

散列函数(散列算法,又称哈希函数)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。

<h3 id="随机生成">随机生成</h3>

加密密钥需要尽可能的随机,以便生成的密钥很难再现。加密随机数生成器必须生成无法通过计算方法推算出(低于p<.05的概率)的输出。

<h3 id="散列函数">散列函数</h3>

基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果,具有这种性质的散列函数称为单向散列函数。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为“散列碰撞”。

<h3 id="主要应用场景">主要应用场景</h3> <ul><li>文件校验</li><li>数字签名</li><li>鉴权协议</li></ul><h3 id="go语言支持">Go语言支持</h3>

go crypto标准包包含了一些常用的哈希算法,例如md5、sha1、sha256、sha512等。以sha1算法为例,了解下go如何生成哈希值。

<pre class="prettyprint"><code class=" hljs go"><span class="hljs-keyword">package</span> main <span class="hljs-keyword">import</span> ( <span class="hljs-string">"crypto/sha1"</span> <span class="hljs-string">"fmt"</span> <span class="hljs-string">"io"</span> <span class="hljs-string">"log"</span> <span class="hljs-string">"os"</span> ) <span class="hljs-keyword">func</span> main() { data := []<span class="hljs-typename">byte</span>(<span class="hljs-string">"this is test, hello world, keep coding"</span>) fmt.Printf(<span class="hljs-string">"%x \n"</span>, sha1.Sum(data)) h := sha1.New() io.WriteString(h, <span class="hljs-string">"this is test, hello world, keep coding"</span>) fmt.Printf(<span class="hljs-string">"%x \n"</span>, h.Sum(<span class="hljs-constant">nil</span>)) fmt.Printf(<span class="hljs-string">"%x \n"</span>, shaFile(<span class="hljs-string">"./file.txt"</span>)) } <span class="hljs-comment">//shaFile利用sha1算法将目标文件生成哈希值</span> <span class="hljs-keyword">func</span> shaFile(filePath <span class="hljs-typename">string</span>) []<span class="hljs-typename">byte</span> { f, err := os.Open(<span class="hljs-string">"file.txt"</span>) <span class="hljs-keyword">if</span> err != <span class="hljs-constant">nil</span> { log.Fatal(err) } <span class="hljs-keyword">defer</span> f.Close() h := sha1.New() <span class="hljs-keyword">if</span> _, err := io.Copy(h, f); err != <span class="hljs-constant">nil</span> { log.Fatal(err) } <span class="hljs-keyword">return</span> h.Sum(<span class="hljs-constant">nil</span>) }</code></pre>

程序运行结果为:

<pre class="prettyprint"><code class=" hljs livecodeserver">a1 <span class="hljs-number">7</span>b <span class="hljs-number">4</span><span class="hljs-operator">a</span> <span class="hljs-number">11</span> <span class="hljs-number">04</span> <span class="hljs-number">95</span> e1 c4 <span class="hljs-number">70</span> <span class="hljs-number">8</span>f a0 <span class="hljs-number">33</span> db <span class="hljs-number">89</span> d6 f6 <span class="hljs-number">13</span> <span class="hljs-number">3</span>d <span class="hljs-number">6</span><span class="hljs-operator">a</span> <span class="hljs-number">48</span> a1 <span class="hljs-number">7</span>b <span class="hljs-number">4</span><span class="hljs-operator">a</span> <span class="hljs-number">11</span> <span class="hljs-number">04</span> <span class="hljs-number">95</span> e1 c4 <span class="hljs-number">70</span> <span class="hljs-number">8</span>f a0 <span class="hljs-number">33</span> db <span class="hljs-number">89</span> d6 f6 <span class="hljs-number">13</span> <span class="hljs-number">3</span>d <span class="hljs-number">6</span><span class="hljs-operator">a</span> <span class="hljs-number">48</span> ccf59c07592fb103ff88062c924962b6f9839a9b</code></pre> 到此这篇关于“Go hash算法的支持”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang 一致性Hash算法实现
Go从入门到精通系列视频之go编程语言密码学哈希算法
go语言的map结构delete方法源码解读
php hash算法实例分享
go随聊-消息摘要算法MD5
golang中接口的内部实现
目录打散hash算法(golang)
【GoLang那点事】深入Go的Map使用和实现原理
Go 语言编程实例(七)
php字符串哈希函数算法实现代码

[关闭]
~ ~