美文网首页
加密算法之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模式全称密文反馈模式,前一分组的密文会被送到密码算法的输入端

    相关文章

      网友评论

          本文标题:加密算法之DES

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