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 } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!