Go語言使用AES加密解密的示例代碼
Go語言提供了標(biāo)準(zhǔn)庫中的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("加密結(jié)果:%s\n", base64.StdEncoding.EncodeToString(ciphertext))
// 解密
decrypted, err := decrypt(ciphertext, key, iv)
if err != nil {
panic(err)
}
fmt.Printf("解密結(jié)果:%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
}以上代碼使用AES-128-CBC模式進(jìn)行加密和解密,可以更換成其他AES模式,如AES-192-CBC或AES-256-CBC等,只需要更改密鑰長度即可。注意,本示例代碼中使用了base64編碼對密文進(jìn)行了格式化,如果您需要直接使用二進(jìn)制密文,請忽略base64編碼部分。
在AES加密和解密的過程中,需要使用到一些參數(shù),以下是這些參數(shù)的作用解釋:
1.Plaintext(明文):需要加密的原始數(shù)據(jù)。
2.Ciphertext(密文):加密后的數(shù)據(jù)。
3.Key(密鑰):用于加密和解密的密鑰,長度可以為16、24或32字節(jié)(即128位、192位或256位)。
4.IV(初始化向量):一段固定長度的隨機(jī)數(shù),用于增強(qiáng)AES加密的強(qiáng)度。IV的長度通常為16字節(jié)(即128位),它必須與密鑰一起使用。
5.Block(塊):AES加密和解密的基本單元,它的大小與密鑰長度相關(guān),例如使用128位密鑰時,塊的大小為128位(即16字節(jié))。
6.Mode(模式):AES加密可以使用多種模式,如ECB、CBC、CFB、OFB等,每種模式都有其特定的加密規(guī)則和優(yōu)缺點(diǎn)。
7.Padding(填充):由于AES加密的塊大小通常為128位,而明文的長度可能不是塊大小的整數(shù)倍,因此需要進(jìn)行填充。常見的填充方式有PKCS#5和PKCS#7,它們可以保證明文長度為塊大小的整數(shù)倍。
以上是AES加密和解密中一些重要的參數(shù)和概念,了解這些參數(shù)和概念可以幫助您更好地理解AES加密和解密的過程和實(shí)現(xiàn)。
到此這篇關(guān)于Go語言使用AES加密解密的示例代碼的文章就介紹到這了,更多相關(guān)Go AES加密解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語言映射內(nèi)部實(shí)現(xiàn)及基礎(chǔ)功能實(shí)戰(zhàn)
這篇文章主要為大家介紹了Go語言映射的內(nèi)部實(shí)現(xiàn)和基礎(chǔ)功能實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-03-03
一文帶你掌握Go語言I/O操作中的io.Reader和io.Writer
在?Go?語言中,io.Reader?和?io.Writer?是兩個非常重要的接口,它們在許多標(biāo)準(zhǔn)庫中都扮演著關(guān)鍵角色,下面就跟隨小編一起學(xué)習(xí)一下它們的使用吧2025-01-01
Go 備份數(shù)據(jù)庫表的實(shí)現(xiàn)示例
備份mysql數(shù)據(jù)庫的方法有很多,常用的可以登錄mysql活著使用mysqldump命令進(jìn)行備份,本文提供golang的方式來備份mysql數(shù)據(jù)庫,下面就來詳細(xì)的介紹一下2026-06-06

