常用加密、编码原理及go语言实现

1.加密算法

1.1Aes

对称加密:加解密用同一个密钥

应用场景:VPN或代理加密通信

分组密码:把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。

在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示

AES 密钥长度(32位) 分组长度(32位) 加密轮数
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14

 对称加密模式

ECB(电码本模式Electronic Codebook Book)

 这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密。

CBC(密码分组链接模式Cipher Block Chaining)

这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。

OFB(输出反馈模式Output FeedBack)

CFB(密码反馈模式Cipher FeedBack)

CTR(计算器模式Counter )

 

1.2 HMACSHA

Sha系列算法

常用的如Sha1、Sha256等。单向散列哈希算法。

Sha1已被破解。

MD5的摘要的长度尽128bit,SHA-1摘要长度160bit。多出32bit意味着什么呢?不同明文的碰撞几率降低了2^32 = 324294967296倍。

SHA-256:可以生成长度256bit的信息摘要。

SHA-224:SHA-256的“阉割版”,可以生成长度224bit的信息摘要。

信息摘要越长,发生碰撞的几率就越低,破解的难度就越大。但同时,耗费的性能和占用的空间也就越高。

SHA算法的底层原理类似Md5,只是摘要分段和处理细节不同。

HMAC算法

引入了密钥,使用单向散列函数来构造消息认证的方法

1.3 Md5

单向散列哈希算法

应用场景:生成信息的摘要,校验数据的完整性;生成唯一ID;存储密码

 MD5、SHA256 等已经不在安全,特别是直接使用 MD5、SHA256等单向散列函数是很不推荐的,最好的方式是在使用 单向散列函数处理之前对明文进行 “加盐处理,这样再限定一下密码长度跟复杂度

1.4 Rsa

非对称加密:加解密用两个密钥,公钥加密数据,私钥解密数据。

应用场景:密钥交换,证书等场景。

单纯的使用 对称加密(如:AES) 的来加密两者传输中,秘钥的传输是一个问题,一旦遭到网络监听,这个秘钥就没有存在的意义了。

单纯的用非对称加密虽然解决了监听问题,但是比较耗资源,对于一个访问量比较大的web服务来说,是不推荐的。

对称加密传输数据,非对称加密传输对称加密密钥。

"crypto/rsa" --加解密算法
 "crypto/x509"--字节/字符串密钥解析->rsa的密钥指针
 "encoding/pem"--perm格式校验解析
crypto/x509:x509包解析X.509编码的证书和密钥
encoding/pem:pem包实现了PEM数据编码(源自保密增强邮件协议)。目前PEM编码主要用于TLS密钥和证书。

2.编码

2.1 Base64编码

MD5原理及应用

AES五种加密模式

分组填充模式

posted @ 2021-10-21 09:49  头号程序媛  阅读(101)  评论(0编辑  收藏  举报