[GO]golang实现AES加解密
2023-02-18 15:41:32 时间
直接上代码:
package tools import ( "bytes" "crypto/aes" "crypto/cipher" ) func PKCS5Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ciphertext)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...) } func PKCS5UnPadding(origData []byte) []byte { length := len(origData) unpadding := int(origData[length-1]) return origData[:(length - unpadding)] } func AesEncrypt(origData, key []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } blockSize := block.BlockSize() origData = PKCS5Padding(origData, blockSize) blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) crypted := make([]byte, len(origData)) blockMode.CryptBlocks(crypted, origData) return crypted, nil } func AesDecrypt(crypted, key []byte) ([]byte, error) { block, err := aes.NewCipher(key) if err != nil { return nil, err } blockSize := block.BlockSize() blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) origData := make([]byte, len(crypted)) blockMode.CryptBlocks(origData, crypted) origData = PKCS5UnPadding(origData) return origData, nil }
AesDecrypt是解密
AesEncrypt是加密,第二个参数是设置的key,key的长度必须是16、24、32
相关文章
- [Linux] Linux系统(进程管理)
- [Linux] Linux系统(用户管理)
- [Linux] Linux系统(文件操作)
- [Linux] Linux系统(登陆、退出、修密码)
- [javaSE] 看博客学习多线程的创建方式和优劣比较和PHP多线程
- [MongoDB] mongodb与php
- [MongoDB] MongoDB增删查改
- [Linux] Linux Shell查找文件
- [Linux] Linux的环境变量
- Git工作流中常见的三种分支策略:GitFlow、GitHubFlow和GitLabFlow
- 2022 IDE各种激活的,码上用起来吧 ,java、python、php、go等等
- Go语言实现的23种设计模式之结构型模式
- 快来,这里有23种设计模式的Go语言实现
- Golang container/ring 环形链表
- 基础架构之Gitlab Runner
- Red Hat Enterprise Linux 9.1镜像迁移到腾讯云操作说明
- GitOps实践之kubernetes部署Argocd
- 分布式版本控制系统Git的使用最全最细;
- C++ Primer Plus习题及答案-第十三章
- C++ Primer Plus习题及答案-第十四章