美文网首页
加密算法之DES

加密算法之DES

作者: Carrism | 来源:发表于2018-12-19 16:36 被阅读6次

DES

DES加密是一种将64位明文加密为64位密文的对称加密算法。DES是以64位明文为一个单位进行加密的,以64位为单位进行分组。

DES的Feistel网络

image

64位明文被分成左右两部分进行处理,右侧数据和子密钥经过轮函数生成用于加密左侧数据的序列,与左侧数据进行异或运算,运算结果输出为位加密后的左侧,右侧数据直接输出位右侧。这样的过程称为一次Feistel轮。

每轮Feistel轮都使用不同的子密钥。由于每轮Feistel不会加密右侧,因此需要将上一轮的输出进行左右两侧对调,DES共计需要进行16次Feistel轮,最后一次无需左右对调。

实现DES的加密跟解密

  • 对明文进行补码,使得明文能够以64位进行分组。在DES加密前使用
func PKCS5Padding(orgData []byte,size int) []byte  {
    padding := size - len(orgData)%8
    padTxt := bytes.Repeat([]byte{byte(padding)},padding)
    return append(orgData,padTxt...)
}
  • DES解密之后得到的还不是初始的明文,需要进行去除之前增加的补码
func PKCS5UnPadding(cipherTxt []byte) []byte  {
    //要删减的字母
    unpadding := int(cipherTxt[len(cipherTxt) - 1])
    length := len(cipherTxt)
    return cipherTxt[:length - unpadding]
}
  • DES加密,这里使用的加密方式为CBC方式
func DesEncrypt(orig []byte,key []byte) []byte  {
    //首先会检查密钥是否合法
    //Des加密算法,密钥的长度必须是8bit
    block,_ := des.NewCipher(key)
    //补码
    orgiData := PKCS5Padding(orig,block.BlockSize())
    //设置加密方式
    blockMode := cipher.NewCBCEncrypter(block,key)
    //创建缓冲区
    crypted := make([]byte,len(orgiData))
    blockMode.CryptBlocks(crypted,orgiData)
    return crypted
}
  • DES解密
func DesDecrypt(cipherTxt []byte,key []byte) []byte  {
    //校验key的有效性
    block,_ := des.NewCipher(key)
    // 设置解码方式
    blockMode := cipher.NewCBCDecrypter(block,key)
    // 创建缓冲区,存放解密后的数据
    orgData := make([]byte,len(cipherTxt))
    //开始解密
    blockMode.CryptBlocks(orgData,cipherTxt)
    //去掉编码
    orgi := PKCS5UnPadding(orgData)
    return orgi
}
  • 使用DES对明文进行加密解密
func main() {
    //原文
    var str = "Hello World"
    //加密得到密文
    desStr := DesEncrypt([]byte(str),[]byte("12345678"))
    //解密得到明文
    sourceStr := DesDecrypt(desStr,[]byte("12345678"))
    fmt.Printf("%s",sourceStr)
}

DES的不同加密模式

1.ECB模式

电子密码本方式,将数据进行按照8个字节进行分组,不足8个字节的则进行补码,划分之后则对数据按照8个字节进行加密,之后按照顺序将计算得到的结果进行拼接得到密文

2.CBC模式

CBC模式上面已进行详解

3.CFB模式

CFB的加密解密模式如下所示:


image

CFB模式全称密文反馈模式,前一分组的密文会被送到密码算法的输入端

相关文章

  • 密码学-札记

    一、加密算法的选择: 1.1 对称加密: 不安全的加密算法: a.DES系加密算法(DES/DESX/3DES/2...

  • 5.1 密码学专题 - 对称加密算法 - 详解 DES 算法

    密码学专题 - 对称加密算法 - DES 算法 5.1 DES 的描述 DES 是一个分组加密算法,它以 64 位...

  • DES 加密算法

    DES 加密算法算是分组加密算法中最简单的算法了,了解 DES 加密算法开源对分组加密算法有一个初步的了解。因此,...

  • 常用对称加密算法

    常用对称加密算法:DES 3DES AES1、DES(Data Encrypti...

  • 基于Java API的DESede(Triple-DES)加密解

    DESede又称Triple-DES即三重DES加密算法,加强了DES的安全性,但速度稍慢,它是一种对称加密算法,...

  • iOS 数据加密(3DES/CBC/PKCS5Padding)

    3DES(或称为Triple DES)是DES加密算法的一种模式、是三重数据加密算法(TDEA,Triple Da...

  • Des

    常用加密算法的Java实现总结 对称加密算法DES、3DES和AES 算法原理DES算法把64位的明文输入块变为6...

  • 证明DES解密算法实际上是DES加密算法的逆

    DES的解密算法和加密算法是相同的,只是子密钥的使用次序相反,即DES解密算法实际上是DES加密算法的逆。 证明:...

  • 加密和安全

    加密算法 对称加密算法 加密和解密使用同一个密钥 DES、3DES、AES、Blowfish、Twofish、ID...

  • JAVA实现对称加密

    对称加密算法 加密密钥 = 解密密钥(完全对称的) 初等加密算法 DES3DES AES PBE IDEA 对称加...

网友评论

      本文标题:加密算法之DES

      本文链接:https://www.haomeiwen.com/subject/tnijkqtx.html