密码学-3DES

本文介绍了3DES加密算法的基础知识,包括其与DES的相似之处和具体使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3DES加密算法

3DES加密算法的使用与DES的用法基本相同,使用方法如下:

    package main

    import (
        "bytes"
        "crypto/des"
        "crypto/cipher"
        "fmt"
        "encoding/base64"
    )

    //补码
    func PKCS5Padding(ciphertext []byte, blocksize int) []byte {
        padding := blocksize - len(ciphertext)%blocksize
        padtext := bytes.Repeat([]byte{byte(padding)}, padding)
        return append(ciphertext, padtext...)
    }

    //3DES加密
    func TripleDescrypt(origData []byte, key []byte) []byte {
        //3DES的秘钥长度必须为24位
        block, _ := des.NewTripleDESCipher(key)
        //补码
        origData = PKCS5Padding(origData, block.BlockSize())
        //设置加密模式
        blockMode := cipher.NewCBCEncrypter(block, key[:8])
        //创建密文数组,加密
        crypted := make([]byte, len(origData))
        blockMode.CryptBlocks(crypted, origData)
        return crypted
    }

    //解密
    func TipleDesDecrypt(crypted, key []byte) [] byte {
        block, _ := des.NewTripleDESCipher(key)
        blockMode := cipher.NewCBCDecrypter(block, key[:8])
        origData := make([]byte, len(crypted))
        blockMode.CryptBlocks(origData, crypted)
        origData = PKCS5UnPadding(origData)
        return origData
    }

    //去码
    func PKCS5UnPadding(origData []byte) []byte {
        length := len(origData)
        // 去掉最后一个字节 unpadding 次
        unpadding := int(origData[length-1])
        return origData[:(length - unpadding)]
    }
    func main() {
        //长度为24byte
        key := []byte("123456789012345678901234")
        a := base64.StdEncoding.EncodeToString(TripleDescrypt([]byte("hello world"), key))
        //加密
        fmt.Println(a)


    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值