<golang>常用对称加密DES、3DES具体实现

版权声明:本文为作者原创,如需转载,请注明出处
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加密函数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值