3DES加密算法原理及实现

article/2025/9/16 16:33:41

目录

引语

加密

加密算法公式

为什么采用加密-解密-加密的形式

解密

代码实现


注意:3DES是3重DES加解密算法,具体原理同DES,不在赘述。

 

引语

DES算法是全网公开的,其安全性是依靠秘钥的,但是随着计算机算力的增长,56位的秘钥容易受到穷举攻击。因此,3DES作为替换升级的方案应运而生。

加密

3DES是对称加密的一种,是DES向AES过渡的加密算法。它使用三个秘钥的三重DES加密方法,该算法执行三次DES算法,其加密的过程是加密-解密-加密。

img
3DES加密流程

 

加密算法公式

3DES使用2个或者3个秘钥,最少112位最多168位。设Ek()和Dk()分别代表DES算法的加密和解密过程,k代表DES算法使用的秘钥,M代表明文,C代表密文,则3DES加密的共识如下:

C = Ek3(Dk2(Ek2(Dk1(C))))

在这里,我们可以使秘钥k1 = k3 ,即使用两个有效的秘钥,已降低对计算机算力的要求;但是,我们不允许k1=k2=k3,因为这样设置,3DES的安全性将退化至DES

 

为什么采用加密-解密-加密的形式

3DES为了向前兼容DES算法,采用了加密-解密-加密的形式 , 简单解释一下:当k1 = k2 = k3时,前两步的结果会相互抵消,相当于仅实现了一次DES加密,因此可以实现对普通DES加密算法的兼容。

 

img
兼容

 

 

解密

3DES解密过程,与加密过程相反,即逆序使用秘钥并执行解密-加密-解密的过程

img
3DES解密过程

 

 

代码实现

使用DES现成类库,实现3DES算法,使用go语言。最近学习go语言,后续有学习笔记。

package main
​
import ("crypto/des""bytes""crypto/cipher""fmt"
)
​
//DES 和 3DES加密区别
//前者 加密  密钥必须是8byte
//后者加密 解密 再加密  密钥必须是24byte
func main() {//定义密钥,必须是24bytekey := []byte("123456789012345678901234")//定义明文origData := []byte("hello world")
​//加密en := ThriDESEnCrypt(origData,key)
​//解密de := ThriDESDeCrypt(en,key)fmt.Println(string(de))
}
//解密
func ThriDESDeCrypt(crypted,key []byte)[]byte{//获取block块block,_ :=des.NewTripleDESCipher(key)//创建切片context := make([]byte,len(crypted))
​//设置解密方式blockMode := cipher.NewCBCDecrypter(block,key[:8])//解密密文到数组blockMode.CryptBlocks(context,crypted)
​//去补码context = PKCSUnPadding(context)return context
}
​
//去补码
func PKCSUnPadding(origData []byte)[]byte{length := len(origData)unpadding := int(origData[length-1])return origData[:length-unpadding]
}
//加密
func ThriDESEnCrypt(origData,key []byte)[]byte{//获取block块block,_ :=des.NewTripleDESCipher(key)//补码origData = PKCSPadding(origData, block.BlockSize())//设置加密方式为 3DES  使用3条56位的密钥对数据进行三次加密blockMode := cipher.NewCBCEncrypter(block,key[:8])
​//创建明文长度的数组crypted := make([]byte,len(origData))
​//加密明文blockMode.CryptBlocks(crypted,origData)
​return crypted
​
​
}
//补码
func PKCSPadding(origData []byte,blockSize int)[]byte{//计算需要补几位数padding := blockSize-len(origData)%blockSize//在切片后面追加char数量的byte(char)padtext := bytes.Repeat([]byte{byte(padding)},padding)
​return append(origData,padtext...)
}

 

 


http://chatgpt.dhexx.cn/article/3xB6kG8d.shtml

相关文章

3DES加密算法原理

一、3DES加密算法简析: 3DES,也称为 3DESede 或 TripleDES,是三重数据加密算法,相当于是对每个数据库应用三次DES的对称加密算法。 由于DES密码长度容易被暴力破解,所以3DES算法通过对DES算法进行改进,增…

简述3DES加密算法

之前我们聊了DES加密算法,在文章的最后我们提到了人们为了克服DES加密算法的不足,提出了三重DES,也就是3DES,今天我们就来简单了解一下它。 什么是3DES? 3DES,也称为3DESede或TripleDES,是三重数…

图解DES、3DES和AES加密算法

文章目录 一、DES1. 加密和解密2. DES的结构(Feistel网络) 二、3DES1. 3DES加密2. 3DES解密 三、AES1. AES最终候选算法和算法确定2. Rijndael2.1 什么是Rijndael2.2 Rijndael的加密和解密 3. AES密钥生成4. AES算法流程图 一、DES 1. 加密和解密 DES是一种将64bit的明文加密…

ArcGIS版本高级应用 数据归档(历史归档 存档数据)

QQ交流群:607330463 GIS开发技术最强交流群 未经允许 禁止转载 可以参考 目录 1地理数据库 (Geodatabase) 存档 2启用存档 3存档过程 4使用历史版本 5使用历史标记 6使用地理数据库历史查看器 7直接使用存档类 8架构更改和存档 9禁用存档 10存档情景…

文件归档功能

在帮助大家运维EDI平台的这几年中,常常有些客户反馈为什么之前发送的数据页面上都没有了呢?我想查询下之前的数据是否有成功发送给我们的客户应该怎么确认呢?业务数据量太大,文件占用磁盘空间太多,我如何快速地确认一些…

如何创建归档?

首先这里我们先了解两个概念归档和压缩,归档就相当于将文件批量打包在一块,便于之后工作查找文件的位置,但是总体文件的大小是不变的,例如我们将10个不通路径下且每个大小都是10M的文件打包在一块,那么归档后的大小就是…

大数据归档-冷热数据分离

1. 什么是TokuDB? TokuDB 是一个支持事务的“新”引擎,有着出色的数据压缩功能,由美国 TokuTek 公司(现在已经被 Percona 公司收购)研发。拥有出色的数据压缩功能,如果您的数据写多读少,而且数…

数据归档,存储的完美储备军

数据爆炸性增长的同时,存储成为了大家首要担心的问题 大家都希望自家数据保存20年、50年后仍完好无损 但是,N年后的数据量已达到一个无法预测的峰值 如此大量的数据在保存时极可能存在丢失、损坏等问题 这时需要提前对数据进行“备份”、“归档” 备份是…

oracle数据库归档模式修改ARCHIVELOG

oracle数据库归档模式修改ARCHIVELOG 一、查看当前数据库的归档模式 第一步:查看oracle数据库的归档模式 命令如下:(该命令登录sys用户可查) select log_mode from v d a t a b a s e ; 如 果 值 为 N O A R C H I V E L O G &am…

数据归档神器-pt-archiver

前言介绍 pt-archiver是用来归档表的工具,可以做到低影响、高性能的归档工具,从表中删除旧数据,而不会对 OLTP 查询产生太大影响。可以将数据插入到另一个表中,该表不需要在同一台服务器上。可以将其写入适合 LOAD DATA INFILE 的…

从MYSQL 数据库归档 到 归档设计

到数据归档,很多人的第一个概念就是,不就是无用的数据,换个地方放吗,直接拷贝,删除不就得了,有那么麻烦。 我见到过的,听到过的数据库归档的方法有以下几种 1 数据通过人工的手段来进行清理&am…

数据存储领域的“归档Archive”

档案圈的朋友想必对档案领域的“归档”一词已经耳熟能详,按照DA/T 58-2014《电子档案管理基本术语》中的定义,归档(Archiving)是指“按照国家规定将具有保存价值的电子文件及其元数据的保管权交给档案部门的过程”。 今天我们要聊…

那些年跟领导聊过的数据归档【DB篇】:从梳理到落地-DB单表千万级归档详细流程讲解

文章目录 知人论世执笔蓝图V1 - 浅尝辄止V2 - 初窥门镜V3 - 木已成舟 躬行方案安内攘外 卓有成效沉淀之石道阻且长 知人论世 无论何种需求的出现都是因为某种迫切解决的问题契机,它是业务发展中定数也是劫数,近期DBA反馈磁盘存储空间超过80%不足以支撑未…

进来偷学一招,数据归档二三事儿

Hello,大家好,我是楼下小黑哥~ 随着业务的快速增长,业务体量变得越来越大,这个过程我们会碰到各种问题,倒逼着我们进行技术升级。 那今天我们来聊下,这个过程将会碰到关于数据的问题。 数据增长带来的烦…

MySQL 归档数据的方法你知道了吗

归档,在 MySQL 中,是一个相对高频的操作。 它通常涉及以下两个动作: 迁移。将数据从业务实例迁移到归档实例。删除。从业务实例中删除已迁移的数据。 在处理类似需求时,都是开发童鞋提单给 DBA,由 DBA 来处理。 于…

7.数据归档(Archiver)

1.归档的基本概念 归档: 是指将数据写入文件存储到程序的沙盒中,当再次重新打开程序时,可以还原这些数据. 称它为数据序列化, 数据持久化. 临时数据: 存储在内存中的数据, 程序关闭, 内存释放,数据丢失数据持久性的方式 1) NSKeyedArchiver—-对象归档 2) NSUserDefaults 3)…

如何用matlab求出矩阵简化阶梯形顺带算出主元所在的列

matlab用rref函数 函数格式 [R,j]rref(A) A是矩阵 R是简化后的阶梯形 j是主元例子:求矩阵A的简化阶梯形与主元所在的列 >> A [1 1 -2 1 4; 2 4 -6 4 8; 2 -3 1 -1 2; 3 6 -9 7 9]; >> [R,j]rref(A)R 1 0 -1 0 40 1 -1 0 …

(线性代数笔记)2.阶梯型矩阵

1.阶梯形矩阵的定义 矩阵的主元 2.任意矩阵经过有限次初等行变换化为阶梯形 这里C是由B通过初等行变化得到的,C也是A的阶梯形 3.矩阵的秩 例题(矩阵通过初等行变换转化为阶梯形)

行阶梯型矩阵,行最简形矩阵,标准形矩阵

行阶梯形矩阵: 行最简形矩阵: 标准形矩阵:

MATLAB--矩阵操作(1.4)

矩阵的逆 >> A*inv(A) ans 1.0000 0 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 0 1.0000 >> norm((ans-eye(3))) ans 1.8620e-15 一个矩阵中行(列)的最大线性无关组的行(列)向量的个…