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
}以上代碼使用AES-128-CBC模式進行加密和解密,可以更換成其他AES模式,如AES-192-CBC或AES-256-CBC等,只需要更改密鑰長度即可。注意,本示例代碼中使用了base64編碼對密文進行了格式化,如果您需要直接使用二進制密文,請忽略base64編碼部分。
在AES加密和解密的過程中,需要使用到一些參數(shù),以下是這些參數(shù)的作用解釋:
1.Plaintext(明文):需要加密的原始數(shù)據(jù)。
2.Ciphertext(密文):加密后的數(shù)據(jù)。
3.Key(密鑰):用于加密和解密的密鑰,長度可以為16、24或32字節(jié)(即128位、192位或256位)。
4.IV(初始化向量):一段固定長度的隨機數(shù),用于增強AES加密的強度。IV的長度通常為16字節(jié)(即128位),它必須與密鑰一起使用。
5.Block(塊):AES加密和解密的基本單元,它的大小與密鑰長度相關,例如使用128位密鑰時,塊的大小為128位(即16字節(jié))。
6.Mode(模式):AES加密可以使用多種模式,如ECB、CBC、CFB、OFB等,每種模式都有其特定的加密規(guī)則和優(yōu)缺點。
7.Padding(填充):由于AES加密的塊大小通常為128位,而明文的長度可能不是塊大小的整數(shù)倍,因此需要進行填充。常見的填充方式有PKCS#5和PKCS#7,它們可以保證明文長度為塊大小的整數(shù)倍。
以上是AES加密和解密中一些重要的參數(shù)和概念,了解這些參數(shù)和概念可以幫助您更好地理解AES加密和解密的過程和實現(xiàn)。
到此這篇關于Go語言使用AES加密解密的示例代碼的文章就介紹到這了,更多相關Go AES加密解密內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang中的Slice與數(shù)組及區(qū)別詳解
數(shù)組是一種具有固定長度的基本數(shù)據(jù)結構,在golang中與C語言一樣數(shù)組一旦創(chuàng)建了它的長度就不允許改變,數(shù)組的空余位置用0填補,不允許數(shù)組越界。今天小編通過實例代碼操作給大家詳細介紹lang中的Slice與數(shù)組的相關知識,一起看看吧2020-02-02

