首页 > 其他 > 详细

熟悉一下GO的AES加密库

时间:2016-03-01 20:42:11      阅读:219      评论:0      收藏:0      [点我收藏+]

 

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
}

熟悉一下GO的AES加密库

原文:http://www.cnblogs.com/hgd7123/p/5232383.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!