熟悉一下GO的AES加密库
2016-03-01 20:21
507 查看
package main import ( "crypto/aes" "crypto/cipher" "errors" ) type ConnAes struct { key string keyBlock cipher.Block iv string } func NewConnAes(key string, iv string) (ca ConnAes, err error) { if len(iv) != aes.BlockSize { return ca, errors.New("error iv size not 16") } ca.key = key ca.iv = iv ca.keyBlock, err = aes.NewCipher([]byte(key)) return ca, err } //加密 func (ca *ConnAes) Encrypt(src []byte) ([]byte, error) { paddinglen := aes.BlockSize - (len(src) % aes.BlockSize) for i := 0; i < paddinglen; i++ { src = append(src, byte(paddinglen)) } enbuf := make([]byte, len(src)) cbce := cipher.NewCBCEncrypter(ca.keyBlock, []byte(iv)) cbce.CryptBlocks(enbuf, src) return enbuf, nil } //解密 func (ca *ConnAes) Decrypt(src []byte) ([]byte, error) { if (len(src) < aes.BlockSize) || (len(src)%aes.BlockSize != 0) { return nil, errors.New("error encrypt data size") } debuf := make([]byte, len(src)) cbcd := cipher.NewCBCDecrypter(ca.keyBlock, []byte(iv)) cbcd.CryptBlocks(debuf, src) paddinglen := int(debuf[len(src)-1]) if paddinglen > 16 { return nil, errors.New("error encrypt data size") } return debuf[:len(src)-paddinglen], nil }
相关文章推荐
- Django~static files
- Django中的F表达式来解决丢失修改问题
- 关于Go语言共享内存操作的小实例
- Xcode警告Category is implementing a method which will also be implemented by its primary class 处理
- POJ2195 Going Home(SPFA最小费用最大流)
- go liteIDE
- Django 路由
- django:field字段类型
- mongo2.4_point_in_time_recovery
- USACO 2016 Jan Gold 愤怒的奶牛(Angry Cows)
- 如何在WindowsAzure上搭建Mean stack环境之如何在中国版Azure上搭MangoDB
- google perftools分析程序性能
- django1.9的static文件配置
- 减少集成google-play-service-lib后编译的apk的大小
- Go语言三大框架点评
- 操作系统 之 银行家算法
- Django:locals()小技巧
- Go语言异常处理defer\panic\recover
- Dragonboard 410C 之 开发板设计规范
- HDU4341-Gold miner-分组DP