DES算法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、DES是什么?
  • 二、go语言实现
    • 1.使用CBC模式
    • 1.使用ECB模式


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、DES是什么?

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。
在这里插入图片描述

二、go语言实现

1.使用CBC模式

//   directory:  src/demo/1DES-cbc.go
package mainimport ("crypto/des""demo1/utils""crypto/cipher""fmt""encoding/hex"
)//使用des算法进行加密
//src:待加密的明文   key:秘钥
func EncryptDES(src, key []byte) []byte {//创建cipher.Block.接口,其对应的就是一个加密块block, err := des.NewCipher(key)if err != nil {panic(err)}//获取每个块的大小length := block.BlockSize()//对最后一组明文进行填充src = utils.PaddingText(src, length)//初始化向量iv := []byte("12345678")//创建cbc加密模式blockMode := cipher.NewCBCEncrypter(block, iv)//创建切片,用于存储加密之后的数据dst := make([]byte, len(src))blockMode.CryptBlocks(dst, src)return dst
}//使用des进行解密
//src:待解密的密文    key:秘钥
func DecryptDES(src, key []byte) []byte {block, err := des.NewCipher(key)if err != nil {panic(err)}iv := []byte("12345678")//创建CBC解密模式blockMode := cipher.NewCBCDecrypter(block, iv)dst := make([]byte, len(src))blockMode.CryptBlocks(dst, src)return utils.UnPaddingText(dst)
}func main() {src := []byte("wei")key := []byte("87654321")encrypt_msg := EncryptDES(src, key)//fmt.Println("encrypt_msg = ", encrypt_msg)fmt.Println("encrypt_msg = ", hex.EncodeToString(encrypt_msg))decrypt_msg := DecryptDES(encrypt_msg, key)fmt.Println("decrypt_msg = ", string(decrypt_msg))
}

// directory :       src/demo1/utils/utils.go
package utilsimport "bytes"//填充最后一个分组
//src:待填充的数据,   blockSize:分组大小
func PaddingText(src []byte, blockSize int) []byte {//求出最后一个分组需要填充的字节数padding := blockSize - len(src)%blockSize//创建新的切片,切片的字节数为padding。padText := bytes.Repeat([]byte{byte(padding)}, padding)//将新创建的切片和待填充的数据进行拼接nextText := append(src, padText...)return nextText
}//删除尾部填充数据
func UnPaddingText(src []byte) []byte {//获取待处理的数据的长度len := len(src)//去除最后一个字符number := int(src[len-1])newText := src[:len-number]return newText
}//ciphertext:待填充的数据   blocksize:每个块的大小
func ZeroPadding(ciphertext []byte, blocksize int) []byte {padding := blocksize - len(ciphertext)%blocksize//填充0padtext := bytes.Repeat([]byte{0}, padding)return append(ciphertext, padtext...)
}//去除尾部填充的0
func ZeroUnPadding(origdata []byte) []byte {return bytes.TrimRightFunc(origdata, func(r rune) bool {return r == rune(0)})
}

1.使用ECB模式

package mainimport ("crypto/des""demo1/utils""fmt""encoding/hex"
)//加密
func DesECBEncrypt(data, key []byte) []byte {block, err := des.NewCipher(key)if err != nil {panic(err)}length := block.BlockSize()data = utils.ZeroPadding(data,length)out := make([]byte, len(data))dst := outfor len(data) > 0 {//每次加密8字节block.Encrypt(dst, data[:length])//去除已被加密的数据data = data[length:]dst = dst[length:]}return out
}//解密
func DesECBDecrypt(data, key []byte) []byte{block, err := des.NewCipher(key)if err != nil {panic(err)}length := block.BlockSize()out := make([]byte, len(data))dst := outfor len(data) > 0 {block.Decrypt(dst, data[:length])data = data[length:]dst = dst[length:]}out = utils.ZeroUnPadding(out)return out
}func main() {key := []byte("12345678")data := []byte("wei")encrypt_msg := DesECBEncrypt(data, key)fmt.Println("encrypt_msg = ", hex.EncodeToString(encrypt_msg))decrypt_msg := DesECBDecrypt(encrypt_msg, key)fmt.Println("decrypt_msg = ", string(decrypt_msg))
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2018年世界前沿科技趋势展望及2017年态势总结

来源:全球技术地图本文以智能制造、新材料和信息三大领域为例,深入浅出的探讨了2017年以来世界前沿科技的发展脉络,并对2018年可能的走势进行了预测。-智能制造领域-2017年态势总结多国推出新举措,推动先进制造发展美国成立白宫贸…

写给女友的情诗

亲爱抱抱每次看到你很快乐的样子总是让我无比欢畅你让我看到幸福 让我看到阳光彼此的那份甜蜜只有你我才能感觉得到你让我忘掉悠愁 让我忘掉烦恼你就是我最闪亮的星星亲爱的让我紧紧的抱抱每次都是那么地不一样无论如何我还是喜欢这样抱着你直到永远Hei Baby You are my favori…

机器人3·15 | 赛迪「机器人国评中心」揭示机器人产品质量6大痛点!

来源:雷克世界机器人是“制造业皇冠顶端的明珠”,其研发、制造、应用是衡量一个国家科技创新和高端制造业水平的重要标志。当前,我国机器人市场进入高速增长期,“机器换人”浪潮势不可挡,产品应用层见叠出,…

Java并发编程实战~Balking模式

上一篇文章中,我们提到可以用“多线程版本的 if”来理解 Guarded Suspension 模式,不同于单线程中的 if,这个“多线程版本的 if”是需要等待的,而且还很执着,必须要等到条件为真。但很显然这个世界,不是所有…

jq如何在打开新的页面 关闭之前同链接的页面_教你如何“抢”其他域名的权重...

白帽波哥的上一篇文章《这三种域名,永远不会有询盘》里留了两个尾巴,一个是如何将好域名的权重导到一个新域名上,另一个是如何清除域名里的垃圾外链。今天先讲第一个,如何将好的老域名权重导到新域名,也就是业内常说的…

ARM GIC (五)gicv3架构-LPI

在gicv3中,引入了一种新的中断类型。message based interrupts,消息中断。 一、消息中断 外设,不在通过专用中断线,向gic发送中断,而是写gic的寄存器,来发送中断。 这样的一个好处是,可以减少中断线的个数。 为了支持消息中断,gicv3,增加了LPI,来支持消息中断。并且…

HtmlTextWriter学习

HtmlTextWriter与Html32TextWriter 这两个类不存在继承和被继承关系。HtmlTextWriter支持Html4.0标准,而Html32TextWriter支持Html3.2标准,在msdn中一般不建议将Html32TextWriter实例话,它仅为支持低版本的浏览器而设计。 HtmlTextWriter初始…

全球自动驾驶汽车发展指数哪家强?美德领衔,中国第七

来源:新智驾近日,罗兰贝格与德国著名汽车研究机构亚琛汽车工程技术有限公司共同发布《2017年第四季度全球自动驾驶汽车发展指数》报告,基于行业和市场两个维度,对全球主要汽车大国在自动驾驶领域的竞争态势做出全面比较。其中“行…

设计模式基本原则

最终目的:高内聚,低耦合 1) 开放封闭原则 (OCP,Open For Extension, Closed For Modification Principle) 类的改动是通过增加代码进行的,而不是修改源代码。 2) 单一职责原则 (SRP,Single Responsibility Principle) 类的职责要单一&a…

笔记:数据绑定表达式(一)

数据绑定表达式必须包含在<%#和%>字符之间。格式如下: <tagprefix:tagname property<%# data-binding expression %> runat"server" />或者如下&#xff1a; <%# data-binding expression %> ASP.NET 支持分层数据绑定模型&#xff0c;数据绑…

Java并发编程实战~Thread-Per-Message模式

我们曾经把并发编程领域的问题总结为三个核心问题&#xff1a;分工、同步和互斥。其中&#xff0c;同步和互斥相关问题更多地源自微观&#xff0c;而分工问题则是源自宏观。我们解决问题&#xff0c;往往都是从宏观入手&#xff0c;在编程领域&#xff0c;软件的设计过程也是先…

水面反光如何拍摄_如何在雨中拍摄,这些技巧会让你的摄影更完美

雨是柔弱的&#xff0c;是世界上最轻灵的东西&#xff0c;敲不响那钢筋水泥造的高楼。而瓦屋则不同&#xff0c;雨滴在上面&#xff0c;叮叮当当的&#xff0c;立即奏出悦耳的声音。身在小屋的人也就有了在雨中亲近自然的福气。而且在雨天睡觉是最舒服的了~在阴雨天气中最熟悉的…

2018全球最强物联网公司榜单揭晓|20家企业物联网战略大起底!

来源&#xff1a; 物联网智库丨公众号IDG旗下杂志《NetWork World》近期公布了全球最强物联网公司名单。本文根据入选评语&#xff0c;对20家企业战略布局进行搜集整理&#xff0c;供业内人士参考&#xff01;根据Gartner预测&#xff0c;到2020年将有超过200亿台联网设备。全球…

MD5算法

文章目录前言一、MD5是什么&#xff1f;二、go语言实现前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、MD5是什么&#xff1f; MD5信息摘要算法&#xff08;英语&#xff1a;MD5 Message-Digest Algorithm&#xff09;&#xff0c;一种被广泛…

Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector

The lxml.etree Tutorial &#xff1a;https://lxml.de/tutorial.html python3 解析 xml&#xff1a;https://www.cnblogs.com/deadwood-2016/p/8116863.html 微软文档&#xff1a; XPath 语法 和 XPath 函数 W3school Xpath 教程&#xff1a;http://www.w3school.com.cn/xp…

Java并发编程实战~生产者-消费者模式

前面我们在《Worker Thread 模式》中讲到&#xff0c;Worker Thread 模式类比的是工厂里车间工人的工作模式。但其实在现实世界&#xff0c;工厂里还有一种流水线的工作模式&#xff0c;类比到编程领域&#xff0c;就是生产者 - 消费者模式。 生产者 - 消费者模式在编程领域的…

4-css图片效果

设置边框border-style:dotted; /* 点画线 */ border-color:#FF9900; /* 边框颜色 */ border-width:5px; /* 边框粗细 */也可以合并书写 border:5px double #FF00FF;width 50% 表示目前此元素宽度相对于父元素宽度为50%float 用于设定图片与文字的混排方式margin用于设置距离…

AI界的七大未解之谜:OpenAI丢出一组AI研究课题

来源&#xff1a;三体智讯今天&#xff0c;OpenAI在官方博客上丢出了7个研究过程中发现的未解决问题。OpenAI希望这些问题能够成为新手入坑AI的一种有趣而有意义的方式&#xff0c;也帮助从业者提升技能。OpenAI版AI界七大未解之谜&#xff0c;现在正式揭晓——丨1. Slitherin难…

vue 前端商城框架_前端工程师要掌握几个Vue框架

vue是一套用于构建用户界面的渐进式JavaScript框架&#xff0c;简单说Vue是类似于view的前端框架。vue开发核心是关注视图层&#xff0c;同时它更加容易与第三方库结合&#xff0c;再者我们在现有的项目中可以直接整合一起。目前vue技术社区在英文或中文都非常丰富&#xff0c;…

sha256算法

文章目录前言一、sha256是什么&#xff1f;二、go语言实现前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、sha256是什么&#xff1f; SHA256是SHA-2下细分出的一种算法 SHA-2&#xff0c;名称来自于安全散列算法2&#xff08;英语&#xff…