Go語(yǔ)言使用AES加密解密的示例代碼
Go語(yǔ)言提供了標(biāo)準(zhǔn)庫(kù)中的crypto/aes包來(lái)支持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等,只需要更改密鑰長(zhǎng)度即可。注意,本示例代碼中使用了base64編碼對(duì)密文進(jìn)行了格式化,如果您需要直接使用二進(jìn)制密文,請(qǐng)忽略base64編碼部分。
在AES加密和解密的過(guò)程中,需要使用到一些參數(shù),以下是這些參數(shù)的作用解釋:
1.Plaintext(明文):需要加密的原始數(shù)據(jù)。
2.Ciphertext(密文):加密后的數(shù)據(jù)。
3.Key(密鑰):用于加密和解密的密鑰,長(zhǎng)度可以為16、24或32字節(jié)(即128位、192位或256位)。
4.IV(初始化向量):一段固定長(zhǎng)度的隨機(jī)數(shù),用于增強(qiáng)AES加密的強(qiáng)度。IV的長(zhǎng)度通常為16字節(jié)(即128位),它必須與密鑰一起使用。
5.Block(塊):AES加密和解密的基本單元,它的大小與密鑰長(zhǎng)度相關(guān),例如使用128位密鑰時(shí),塊的大小為128位(即16字節(jié))。
6.Mode(模式):AES加密可以使用多種模式,如ECB、CBC、CFB、OFB等,每種模式都有其特定的加密規(guī)則和優(yōu)缺點(diǎn)。
7.Padding(填充):由于AES加密的塊大小通常為128位,而明文的長(zhǎng)度可能不是塊大小的整數(shù)倍,因此需要進(jìn)行填充。常見(jiàn)的填充方式有PKCS#5和PKCS#7,它們可以保證明文長(zhǎng)度為塊大小的整數(shù)倍。
以上是AES加密和解密中一些重要的參數(shù)和概念,了解這些參數(shù)和概念可以幫助您更好地理解AES加密和解密的過(guò)程和實(shí)現(xiàn)。
到此這篇關(guān)于Go語(yǔ)言使用AES加密解密的示例代碼的文章就介紹到這了,更多相關(guān)Go AES加密解密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go語(yǔ)言實(shí)現(xiàn)屏幕截圖的示例代碼
屏幕截圖在很多地方都可以 用到,本文主要介紹了go語(yǔ)言實(shí)現(xiàn)屏幕截圖的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Golang中的Slice與數(shù)組及區(qū)別詳解
數(shù)組是一種具有固定長(zhǎng)度的基本數(shù)據(jù)結(jié)構(gòu),在golang中與C語(yǔ)言一樣數(shù)組一旦創(chuàng)建了它的長(zhǎng)度就不允許改變,數(shù)組的空余位置用0填補(bǔ),不允許數(shù)組越界。今天小編通過(guò)實(shí)例代碼操作給大家詳細(xì)介紹lang中的Slice與數(shù)組的相關(guān)知識(shí),一起看看吧2020-02-02GoLang基礎(chǔ)學(xué)習(xí)之go?test測(cè)試
相信每位編程開(kāi)發(fā)者們應(yīng)該都知道,Golang作為一門(mén)標(biāo)榜工程化的語(yǔ)言,提供了非常簡(jiǎn)便、實(shí)用的編寫(xiě)單元測(cè)試的能力,下面這篇文章主要給大家介紹了關(guān)于GoLang基礎(chǔ)學(xué)習(xí)之go?test測(cè)試的相關(guān)資料,需要的朋友可以參考下2022-08-08Go 標(biāo)準(zhǔn)庫(kù)增加metrics指標(biāo)探討分析
go中有一個(gè)神奇的標(biāo)準(zhǔn)庫(kù) runtime/metrics,提供了一系列預(yù)定義好的 Go 自身的相關(guān)指標(biāo),如果沒(méi)有編寫(xiě)過(guò)基礎(chǔ)監(jiān)控庫(kù)或者關(guān)注的比較少的朋友可能會(huì)沒(méi)接觸到這類指標(biāo),本文展開(kāi)現(xiàn)有metrics 指標(biāo),并結(jié)合現(xiàn)有的社區(qū)討論一起看看還有沒(méi)有必要增加更多的標(biāo)準(zhǔn)庫(kù)指標(biāo)2023-10-10