golang中crypto/aes包

栏目: Go · 发布时间: 7年前

内容简介:aes是对称加密算法,这篇博客只介绍怎么使用golang中怎么调用标准库已封装的算法实现,如果是要学习aes算法实现,移步百度有两个操作:加密和解密const BlockSize = 16

aes是对称加密算法,这篇博客只介绍怎么使用golang中怎么调用标准库已封装的算法实现,如果是要学习aes算法实现,移步百度

有两个操作:加密和解密

const BlockSize = 16

功能说明:AES算法块(加密数据块)的字节长度。

package main

import (
    "bytes"
    "crypto/aes"
    "crypto/cipher"
    "log"
    "fmt"
)

// 填充数据
func padding(src []byte, blockSize int) []byte {
    padNum := blockSize - len(src) % blockSize
    pad := bytes.Repeat([]byte{byte(padNum)}, padNum)
    return append(src, pad...)
}

// 去掉填充数据
func unpadding(src []byte) []byte {
    n := len(src)
    unPadNum := int(src[n-1])
    return src[:n-unPadNum]
}

// 加密
func encryptAES(src []byte, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    src = padding(src, block.BlockSize())
    blockMode := cipher.NewCBCEncrypter(block, key)
    blockMode.CryptBlocks(src, src)
    return src, nil
}

// 解密
func decryptAES(src []byte, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    blockMode := cipher.NewCBCDecrypter(block, key)
    blockMode.CryptBlocks(src, src)
    src = unpadding(src)
    return src, nil
}

func main() {
    d := []byte("hello,ase")
    key := []byte("hgfedcba87654321")
    fmt.Println("加密前:", string(d))
    x1, err := encryptAES(d, key)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println("加密后:", string(x1))
    x2, err := decryptAES(x1, key)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println("解密后:", string(x2))
}

以上所述就是小编给大家介绍的《golang中crypto/aes包》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

iBATIS实战

iBATIS实战

(加)Clinton Begin、(加)Brandon Goodin、(加)Larry Meadors / 叶俊 / 人民邮电出版社 / 2008-5 / 45.00元

《图灵程序设计丛书•Java系列•iBATIS in Action iBATIS实战》是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《图灵程序设计丛书•Java系列•iBATIS in Action iBATIS实战》的最后给出了一个设计优雅、层次清晰的示例程序JGa......一起来看看 《iBATIS实战》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具