美文网首页
golang实现 aes加解密,对称加密

golang实现 aes加解密,对称加密

作者: 吃馍夹菜 | 来源:发表于2020-11-12 10:56 被阅读0次

直接上代码

package main

import (
    "bytes"
    "crypto/aes"
    "crypto/cipher"
    "encoding/base64"
    "fmt"
    "strconv"
)

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

func PKCS7UnPadding(origData []byte) []byte {
    length := len(origData)
    unpadding := int(origData[length-1])
    return origData[:(length - unpadding)]
}

//AES加密,CBC
func AesEncrypt(origData, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    blockSize := block.BlockSize()
    origData = PKCS7Padding(origData, blockSize)
    blockMode := cipher.NewCBCEncrypter(block, key[:blockSize])
    crypted := make([]byte, len(origData))
    blockMode.CryptBlocks(crypted, origData)
    return crypted, nil
}

//AES解密
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 = PKCS7UnPadding(origData)
    return origData, nil
}

调用

func main() {
    text := "123" // 你要加密的数据
    AesKey := []byte("#HvL%$o0oNNoOZnk#o2qbqCeQB1iXeIR") // 对称秘钥长度必须是16的倍数

    fmt.Printf("明文: %s\n秘钥: %s\n", text, string(AesKey))
    encrypted, err := AesEncrypt([]byte(text), AesKey)
    if err != nil {
        panic(err)
    }
    fmt.Printf("加密后: %s\n", base64.StdEncoding.EncodeToString(encrypted))
    //encrypteds, _ := base64.StdEncoding.DecodeString("xvhqp8bT0mkEcAsNK+L4fw==")
    origin, err := AesDecrypt(encrypted, AesKey)
    if err != nil {
        panic(err)
    }
    fmt.Printf("解密后明文: %s\n", string(origin))
}

返回数据:

明文: 123
秘钥: #HvL%$o0oNNoOZnk#o2qbqCeQB1iXeIR
加密后: xvhqp8bT0mkEcAsNK+L4fw==
解密后明文: 123

相关文章

  • golang实现 aes加解密,对称加密

    直接上代码 调用 返回数据:

  • 011各种加密算法比较

    算法选择:对称加密AES,非对称加密: ECC,消息摘要: MD5,数字签名:DSA 对称加密算法(加解密密钥相同...

  • Android加解密篇AES

    AES方式加解密 高级加密标准(Advanced Encryption Standard),对称秘钥加密算法之一。...

  • Android网络加密

    加解密的技术分类 哈希函数 - SHA256、MD5 对称加密 - AES 、DES 非堆成加密 - RSA ...

  • iOS签名机制

    安全方案 对称密码:DES,3DES,AES 加解密用同一个密钥 加解密速度快 无法解决密钥配送问题 非对称加密:...

  • golang中crypto/aes包

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

  • iOS加密小记

    1 对称加密加密解密是同一个密钥,加解密速度快,常见的有DES,3DES,AES128,AES256等。DES已经...

  • 前后端数据交互加密AES+RSA

    附件下载:前后端数据交互加密实例.zip 简单介绍一下AES和RSA AES:对称加解密,加密解密使用同一个秘钥。...

  • Https的交互流程

    先理解几个概念对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等,...

  • ios 加密

    1、常见加密算法 : 对称加密:AES、DES、3DES、RC4 优点:加解密速度快 没有长度限制 缺点:密钥容易...

网友评论

      本文标题:golang实现 aes加解密,对称加密

      本文链接:https://www.haomeiwen.com/subject/cvpebktx.html