go中使用des cbc加密解密

加密:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
func MyEncrypt(data, key []byte, iv []byte) ([]byte, error) {
    /*
        key必须是8位,否则报错:
        if len(key) != 8 {
            return nil, KeySizeError(len(key))
        }
    */
    block, err := des.NewCipher(key)
    if err != nil {
        return nil, err
    }
    bs := block.BlockSize()
    data = PKCS5Padding(data, bs) //填充字符
    blockMode := cipher.NewCBCEncrypter(block, iv)
    out := make([]byte, len(data))
    blockMode.CryptBlocks(out, data)
    return out, nil
}
 
func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
    padding := blockSize - len(ciphertext)%blockSize
    padText := bytes.Repeat([]byte{byte(padding)}, padding)
    return append(ciphertext, padText...)
}
 
func base64Encode(src []byte) []byte {
    return []byte(base64.StdEncoding.EncodeToString(src))
}
 
func main() {
    key := []byte("12345678")
    iv := []byte("12345678")
    data := []byte("hello world")
    out, _ := MyEncrypt(data, key, iv)
    deByte := base64Encode(out)
    log.Println("加密后:", string(deByte))   //2022/01/17 15:40:30 加密后: CyqS6B+0nOGkMmaqyup7gQ==
}

解密: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func MyDecrypt(data []byte, key []byte, iv []byte) ([]byte, error) {
    block, err := des.NewCipher(key)
    if err != nil {
        return nil, err
    }
    blockMode := cipher.NewCBCDecrypter(block, iv)
    out := make([]byte, len(data))
    blockMode.CryptBlocks(out, data)
    out = PKCS5UnPadding(out)
    return out, nil
}
 
func PKCS5UnPadding(origData []byte) []byte {
    length := len(origData)
    unPadding := int(origData[length-1])
    return origData[:(length - unPadding)]
}
 
func base64Decode(src []byte) ([]byte, error) {
    return base64.StdEncoding.DecodeString(string(src))
}
 
func main() {
    key := []byte("12345678")
    iv := []byte("12345678")
    src := []byte("CyqS6B+0nOGkMmaqyup7gQ==")
    enByte, _ := base64Decode(src)
    out, _ := MyDecrypt(enByte, key, iv)
    log.Println("解密后:", string(out))  //2022/01/17 15:44:23 解密后: hello world
}

  

  

posted @   屁桃  阅读(386)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示