golang AES CBC加密与解密

simon_白 · · 3176 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

golang实现 AES CBC加密与解密
实现方法

package utils

import "crypto/aes"
import "crypto/cipher"
import "bytes"
import "encoding/base64"
import "log"
import "../config"

var key = []byte(config.REQ_KEY)
var iv = []byte(config.REQ_IV)

func Encrypt(text []byte) (string,error) {
        //生成cipher.Block 数据块
        block, err := aes.NewCipher(key)
        if err != nil {
                log.Println("错误 -" +err.Error())
                return "",err
        }
        //填充内容,如果不足16位字符
        blockSize := block.BlockSize()
        originData := pad(text,blockSize)
        //加密方式
        blockMode := cipher.NewCBCEncrypter(block,iv)
        //加密,输出到[]byte数组
        crypted := make([]byte,len(originData))
        blockMode.CryptBlocks(crypted,originData)
        return base64.StdEncoding.EncodeToString(crypted) , nil
}

func pad(ciphertext []byte, blockSize int) []byte{
        padding := blockSize - len(ciphertext) % blockSize
        padtext := bytes.Repeat([]byte{byte(padding)},padding)
        return append(ciphertext,padtext...)
}

func Decrypt(text string) (string,error){
        decode_data,err := base64.StdEncoding.DecodeString(text)
        if err != nil {
                return "",nil
        }
        //生成密码数据块cipher.Block
        block,_ := aes.NewCipher(key)
        //解密模式
        blockMode := cipher.NewCBCDecrypter(block,iv)
        //输出到[]byte数组
        origin_data := make([]byte,len(decode_data))
        blockMode.CryptBlocks(origin_data,decode_data)
        //去除填充,并返回
        return string(unpad(origin_data)),nil
}

func unpad(ciphertext []byte) []byte{
        length := len(ciphertext)
        //去掉最后一次的padding
        unpadding := int(ciphertext[length - 1])
        return ciphertext[:(length - unpadding)]
}

配置文件

package config

var (
    REQ_KEY="KHGSI69YBWGS0TWX"
    REQ_IV="3010201735544643"
)

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:simon_白

查看原文:golang AES CBC加密与解密

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3176 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传