目录

引语

加密

加密算法公式

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

解密

代码实现


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

引语

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

加密

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

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加密算法的兼容。

兼容

解密

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

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...)
}

3DES加密算法原理及实现相关推荐

  1. 3DES加密算法原理及实现过程

    之前介绍了DES算法的原理和实现过程,现在介绍一下3DES的原理和实现过程. DES算法的密钥长度为64位(实际有效长度为56位,因为每隔8位中有1位为校验位,使用的是奇偶校验法). 其实3DES就是 ...

  2. DES和3DES加密算法C语言实现

    DES和3DES加密算法C语言实现 记录DES和3DES加密算法最简洁易懂的C语言源码 主要是要用到CBC这部分的算法,后边也有一个工具可以提供验证,因为网上的工具含有CBC的很少,也方便大家吧 之前 ...

  3. md5加密算法原理及其GO语言实现

    md5加密算法原理及其GO语言实现 MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值 ...

  4. 【中级软考】计算能力足够强大,所有加密算法原理上都会被破解吗?

    结论: 是的 但: 在信息技术领域,为达成既定目标选择做某事或不做某事.选择走某路线或不走某路线,性价比是一个极其重要的考虑因素.不做不等于落后. 引用文章:计算能力足够强大,所有加密算法原理上都会被 ...

  5. Base64 加密算法原理

    Base64 加密算法原理 Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法. 因为在内存中每个字节占8位,即 1 by ...

  6. TripleDES类 3des加密算法实现

    可以加密字符串,也可以加密字节数组. 采用3-des加密算法,加密键只能是16byte(128位)或者是24byte(192位)的,指定的键不仅有长度上的要求,还不能是个弱键  ( 注:DES 算法使 ...

  7. HTTPS 加密算法原理详解

    本文讲的是HTTPS 加密算法原理详解, 前言 HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一 ...

  8. paillier同态加密算法原理及代码实现

    paillier同态加密算法原理及代码实现 由于工程量巨大,这里先贴上代码提醒自己还有这么个事情,等寒假有时间了再慢慢补充解析 代码实现 提前生成素数打表来提升算法速度,生成素数的代码点这里 注意:待 ...

  9. 公钥加密技术ECC椭圆曲线加密算法原理

    同样来自B站不错的视频讲解:公钥加密技术ECC椭圆曲线加密算法原理_哔哩哔哩_bilibili 就曲线上A点,过B点,第3点如果也交在曲线上的话,再做一次镜像,就肯定得到C点,那么这个就叫做点运算. ...

最新文章

  1. javascript设计模式漫谈之使用委托
  2. JS数组方法(forEach()、every()、reduce())
  3. python生成一定范围的符合正态分布的数
  4. linux 块设备驱动 (三)块设备驱动开发
  5. ORA-20000:ORU-10027:buffer overflow,limit of 2000 bytes.
  6. xampp打开mysql的admin访问被拒绝_U盘插入电脑提示无法访问?别怕,我找到解决办法了...
  7. 计算机应用基础学生自查报告,计算机应用基础(专科).docx
  8. 前端学习(2788):完成图片商品数据页面渲染
  9. Linux 多网卡bond
  10. vs xgb 神经网络_业界 | 深度学习与XGBoost在小数据集上的测评,你怎么看?(附源码)...
  11. 云计算数据中心Spine-Leaf模型简介
  12. VBA 如何多条件查询汇总
  13. lsp语言服务器,身为程序员还不知道?Xtext与LSP让一个语言服务器横扫多个IDE!-lsp文件...
  14. mac安装win7之后鼠标失灵_mac安装win7鼠标失灵怎么办
  15. selenium.webdriver网页无法正常打开的问题
  16. NUC970裸机IIC驱动
  17. 姓名如果取得好,也能趋吉避凶
  18. 当我们谈论Virtual DOM时,我们在说什么——etch源码解读
  19. C语言开发过程中段错误处理方法之经典
  20. 盘点:当今十大备份应用软件(转)

热门文章

  1. 学计算机三本大学最低分数线,三本学校(三本大学最低分数线)
  2. MPLS协议原理与配置详解
  3. Win10无线网络受限制怎么办?
  4. @RequestMapping中produces
  5. kotlin 构建对象_使用Kotlin,TypeScript和Okta构建安全的Notes应用程序
  6. Mysql 创建学生课程表
  7. Matlab中mat2cell函数使用
  8. 使用matlab中cell2mat报错:错误使用cat 要串联的数组的维度不一致
  9. 机器学习之归一化处理
  10. JSON与实体类的转换