• Go语言使用AES加密解密


    Go语言提供了标准库中的crypto/aes包来支持AES加密和解密。下面是使用AES-128-CBC模式加密和解密的示例代码:

    package main
    
    import (
        "crypto/aes"
        "crypto/cipher"
        "encoding/base64"
        "fmt"
    )
    
    func main() {
        key := []byte("this is a 16 byte key")
        iv := []byte("this is a 16 byte iv")
    
        plaintext := []byte("hello world")
    
        // 加密
        ciphertext, err := encrypt(plaintext, key, iv)
        if err != nil {
            panic(err)
        }
        fmt.Printf("加密结果:%s\n", base64.StdEncoding.EncodeToString(ciphertext))
    
        // 解密
        decrypted, err := decrypt(ciphertext, key, iv)
        if err != nil {
            panic(err)
        }
        fmt.Printf("解密结果:%s\n", decrypted)
    }
    
    func encrypt(plaintext []byte, key []byte, iv []byte) ([]byte, error) {
        block, err := aes.NewCipher(key)
        if err != nil {
            return nil, err
        }
    
        ciphertext := make([]byte, len(plaintext))
        mode := cipher.NewCBCEncrypter(block, iv)
        mode.CryptBlocks(ciphertext, plaintext)
    
        return ciphertext, nil
    }
    
    func decrypt(ciphertext []byte, key []byte, iv []byte) ([]byte, error) {
        block, err := aes.NewCipher(key)
        if err != nil {
            return nil, err
        }
    
        plaintext := make([]byte, len(ciphertext))
        mode := cipher.NewCBCDecrypter(block, iv)
        mode.CryptBlocks(plaintext, ciphertext)
    
        return plaintext, nil
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    以上代码使用AES-128-CBC模式进行加密和解密,可以更换成其他AES模式,如AES-192-CBC或AES-256-CBC等,只需要更改密钥长度即可。注意,本示例代码中使用了base64编码对密文进行了格式化,如果您需要直接使用二进制密文,请忽略base64编码部分。

    AES加密和解密的过程中,需要使用到一些参数,以下是这些参数的作用解释:
    1.Plaintext(明文):需要加密的原始数据。

    2.Ciphertext(密文):加密后的数据。

    3.Key(密钥):用于加密和解密的密钥,长度可以为16、24或32字节(即128位、192位或256位)。

    4.IV(初始化向量):一段固定长度的随机数,用于增强AES加密的强度。IV的长度通常为16字节(即128位),它必须与密钥一起使用。

    5.Block(块):AES加密和解密的基本单元,它的大小与密钥长度相关,例如使用128位密钥时,块的大小为128位(即16字节)。

    6.Mode(模式):AES加密可以使用多种模式,如ECB、CBC、CFB、OFB等,每种模式都有其特定的加密规则和优缺点。

    7.Padding(填充):由于AES加密的块大小通常为128位,而明文的长度可能不是块大小的整数倍,因此需要进行填充。常见的填充方式有PKCS#5和PKCS#7,它们可以保证明文长度为块大小的整数倍。

    以上是AES加密和解密中一些重要的参数和概念,了解这些参数和概念可以帮助您更好地理解AES加密和解密的过程和实现。

  • 相关阅读:
    第2章Linux常用命令(下)
    easypoi-通过反射动态修改表格抬头
    基于JAVA师生交流平台计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    自学Python,学不会怎么办?
    delete删除后怎么恢复文件?四种方法进行找回
    【《C Primer Plus》读书笔记】第7章:C控制语句:分支和跳转
    spring整合struts2
    【Java】查找jdk步骤
    Azure 深入浅出[2] --- App Service的部署并查看应用Log
    【MATLAB源码-第68期】基于matlab的802.11b 11Mbps CCK调制解调误码率仿真。
  • 原文地址:https://blog.csdn.net/m0_73728511/article/details/132725183