sha256算法go语言 sha1算法代码

Go 实现 TLS 双向认证 将会在 config 文件夹中生成 ca.key 和 ca.crt 文件
将会在config 文件夹中生成 server.key 、 server.csr 和 server.crt 文件
签名方式sha256算法go语言: SHA-256 sha256算法go语言,默认sha256算法go语言的 SHA-1 签名算法安全性不够高,Go 中会出现警告 。
将会在config文件夹中生成 client.key 、 client.csr 和 client.crt 文件
签名方式sha256算法go语言: SHA-256,默认sha256算法go语言的 SHA-1 签名算法安全性不够高,Go 中会出现警告 。
wireshark截图如下:
什么是安全散列算法SHA256安全散列算法SHA(Secure Hash Algorithm)是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等变体 。主要适用于数字签名标准(DigitalSignature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA) 。下面以 SHA-1为例,介绍该算法计算消息摘要的原理 。
对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要 。当接收到消息的时候 , 这个消息摘要可以用来验证数据的完整性 。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要 。
SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要 。
一、术语和概念
(一)位(Bit),字节(Byte)和字(Word)
SHA1始终把消息当成一个位(bit)字符串来处理 。本文中 , 一个“字”(Word)是32位,而一个“字节”(Byte)是8位 。比如,字符串“abc”可以被转换成一个位字符串:01100001 01100010 01100011 。它也可以被表示成16进制字符串:0x616263.
(二)运算符和符号
下面的逻辑运算符都被运用于“字”(Word)
X^Y = X,Y逻辑与
X \/ Y = X,Y逻辑或
X XOR Y= X,Y逻辑异或
~X = X逻辑取反
X+Y定义如下:
字 X 和Y 代表两个整数 x 和y, 其中0 = x2^32 且 0 = y2^32. 令整数z= (x + y) mod 2^32. 这时候 0 = z2^32. 将z转换成字Z,那么就是 Z = X + Y.
循环左移位操作符Sn(X) 。X是一个字,n是一个整数,0=n=32 。Sn(X)= (X32-n)
X定义如下:抛弃最左边的n位数字,将各个位依次向左移动n位 , 然后用0填补右边的n位(最后结果还是32位) 。Xn是抛弃右边的n位,将各个位依次向右移动n位,然后在左边的n位填0 。因此可以叫Sn(X)位循环移位运算
二、SHA1算法描述
在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串 。SHA1算法只接受位作为输入 。假设我们对字符串“abc”产生消息摘要 。首先,我们将它转换成位字符串如下:
01100001 0110001001100011
―――――――――――――
‘a’=97 ‘b’=98‘c’=99
这个位字符串的长度为24 。下面我们需要5个步骤来计算MD5 。
(一)补位
消息必须进行补位,以使其长度在对512取模以后的余数是448 。也就是说,(补位后的消息长度)%512 = 448 。即使长度已经满足对512取模后余数是448,补位也必须要进行 。
补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448 。总而言之 , 补位是至少补一位,最多补512位 。还是以前面的“abc”为例显示补位的过程 。
原始信息:01100001 01100010 01100011
补位第一步:0110000101100010 01100011 1
首先补一个“1”
补位第二步:0110000101100010 01100011 10…..0
然后补423个“0”
我们可以把最后补位完成后的数据用16进制写成下面的样子
61626380 0000000000000000 00000000

推荐阅读