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)缺點。
7.Padding(填充):由于AES加密的塊大小通常為128位,而明文的長度可能不是塊大小的整數(shù)倍,因此需要進(jìn)行填充。常見的填充方式有PKCS#5和PKCS#7,它們可以保證明文長度為塊大小的整數(shù)倍。
以上是AES加密和解密中一些重要的參數(shù)和概念,了解這些參數(shù)和概念可以幫助您更好地理解AES加密和解密的過程和實現(xiàn)。
到此這篇關(guān)于Go語言使用AES加密解密的示例代碼的文章就介紹到這了,更多相關(guān)Go AES加密解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang中的Slice與數(shù)組及區(qū)別詳解
數(shù)組是一種具有固定長度的基本數(shù)據(jù)結(jié)構(gòu),在golang中與C語言一樣數(shù)組一旦創(chuàng)建了它的長度就不允許改變,數(shù)組的空余位置用0填補(bǔ),不允許數(shù)組越界。今天小編通過實例代碼操作給大家詳細(xì)介紹lang中的Slice與數(shù)組的相關(guān)知識,一起看看吧2020-02-02GoLang基礎(chǔ)學(xué)習(xí)之go?test測試
相信每位編程開發(fā)者們應(yīng)該都知道,Golang作為一門標(biāo)榜工程化的語言,提供了非常簡便、實用的編寫單元測試的能力,下面這篇文章主要給大家介紹了關(guān)于GoLang基礎(chǔ)學(xué)習(xí)之go?test測試的相關(guān)資料,需要的朋友可以參考下2022-08-08Go 標(biāo)準(zhǔn)庫增加metrics指標(biāo)探討分析
go中有一個神奇的標(biāo)準(zhǔn)庫 runtime/metrics,提供了一系列預(yù)定義好的 Go 自身的相關(guān)指標(biāo),如果沒有編寫過基礎(chǔ)監(jiān)控庫或者關(guān)注的比較少的朋友可能會沒接觸到這類指標(biāo),本文展開現(xiàn)有metrics 指標(biāo),并結(jié)合現(xiàn)有的社區(qū)討論一起看看還有沒有必要增加更多的標(biāo)準(zhǔn)庫指標(biāo)2023-10-10