版权声明:本文为作者原创,如需转载,请注明出处
https://blog.csdn.net/weixin_42940826
注:分组加密算法需要用分组模式的知识,在我上一篇帖子里有具体介绍,欢迎来戳对称加密算法常用的五种分组模式(ECB/CBC/CFB/OFB/CTR)
DES简介和实现
DES – Data Encryption Standard
(已经被破解不再使用,但是很有研究价值,而且诞生出了3DES还可以使用)
常见问题
Q1 :是不是分组密码?
A :是, 先对数据进行分组, 然后在加密或解密
Q2:DES的分组长度?
A:8byte == 64bit
Q3: DES的秘钥长度?
A:56bit秘钥长度+8bit错误检测标志位 = 8byte == 64bit
接下来我们使用CBC分组模式实现DES的加密解密(一种常用且需要填充的分组模式)
package main
import (
"bytes"
"crypto/des"
"crypto/cipher"
"fmt"
)
//首先需要一个填充函数,确保长度是模块长度的整数倍
func Padding(blockSize int,plainText []byte)[]byte {
//计算当前明文字节数除以模块长度的余数
yu:=len(plainText)%blockSize
//需要填充的长度即为模块长度减去余数
needlen:=blockSize-yu
//得到填充的字符
//为了方便解密时的去填充操作,我们将填充的字符设置为填充长度
needbytes:=bytes.Repeat([]byte{
byte(needlen)},needlen)
newPlaintext:=append(plainText,needbytes...)
return newPlaintext
}
//再来一个解密时所需的去填充函数,和填充函数同理,不做过多注释
func Unpadding(plainText []byte)[]byte {
needlen:=plainText[len(plainText)-1]
return plainText[:len(plainText)-int(needlen)]
}
//CBC模式下的DES加密函数