最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

GO語言實現(xiàn)AES-CFB加密的操作方法

 更新時間:2024年10月29日 10:02:51   作者:且去填詞  
本文介紹了如何用Go語言實現(xiàn)AES-CFB加密和解密,首先,定義一個屬于encrypt包的文件,使用AES算法、CFB模式和Base64編碼等功能,在加密函數(shù)中,接收明文和密鑰,生成一個AES塊密碼和一個隨機的初始化向量,實現(xiàn)明文的加密

這里為了使用方便,實現(xiàn)代碼不作為一個函數(shù)而是作為一個包,這樣在后面的代碼中也可以進行復用。

包和導入

package encrypt
import (
	"crypto/aes"        // 提供 AES 加密算法實現(xiàn)
	"crypto/cipher"     // 提供加密算法接口和模式(如 CFB)
	"crypto/rand"       // 提供生成隨機數(shù)功能
	"encoding/base64"   // 提供 Base64 編碼和解碼
	"fmt"               // 格式化 I/O
	"io"                // 基本 I/O 接口
)

package encrypt: 定義該文件屬于 encrypt 包。
各種導入用于提供不同功能,如 AES 算法、CFB 模式、Base64 編碼等。

Encrypt 函數(shù)

// Encrypt 對明文進行AES-CFB加密
func Encrypt(plaintext []byte, key string) (string, error) {
	block, err := aes.NewCipher([]byte(key))
	if err != nil {
		return "", err
	}
	iv := make([]byte, aes.BlockSize)
	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
		return "", err
	}
	stream := cipher.NewCFBEncrypter(block, iv)
	ciphertext := make([]byte, len(plaintext))
	stream.XORKeyStream(ciphertext, plaintext)
	// 合并 IV 和密文
	result := append(iv, ciphertext...)
	// 使用 Base64 編碼返回
	return base64.StdEncoding.EncodeToString(result), nil
}
  • Encrypt 函數(shù)接收明文和用于 AES 加密的密鑰。
  • aes.NewCipher([]byte(key)): 利用提供的密鑰生成一個 AES 塊密碼。
  • iv(初始化向量)是 AES 塊大?。?6 字節(jié))的隨機數(shù),確保同樣的明文每次加密結果不同。
  • 使用 cipher.NewCFBEncrypter 創(chuàng)建 CFB 加密
  • stream.XORKeyStream(ciphertext, plaintext): 用流加密對明文進行加密,結果保存在 ciphertext 中。
  • 將 iv 和 ciphertext 合并為一個切片,然后使用 Base64 編碼生成字符串

Decrypt 函數(shù)

// Decrypt 對密文進行AES-CFB解密
func Decrypt(ciphertextBase64 string, key string) ([]byte, error) {
	ciphertext, err := base64.StdEncoding.DecodeString(ciphertextBase64)
	if err != nil {
		return nil, err
	}
	block, err := aes.NewCipher([]byte(key))
	if err != nil {
		return nil, err
	}
	if len(ciphertext) < aes.BlockSize {
		return nil, fmt.Errorf("ciphertext too short")
	}
	iv := ciphertext[:aes.BlockSize]
	ciphertext = ciphertext[aes.BlockSize:]
	stream := cipher.NewCFBDecrypter(block, iv)
	plaintext := make([]byte, len(ciphertext))
	stream.XORKeyStream(plaintext, ciphertext)
	return plaintext, nil
}
  • Decrypt 函數(shù)接收 Base64 編碼的密文和密鑰。 將 Base64 密文解碼成字節(jié)切片。 類似加密過程,生成 AES 塊密碼。
  • 驗證密文長度,確保其大于 AES 塊大小。 從解碼后的密文中提取 iv,其余部分為實際密文。 使用cipher.NewCFBDecrypter 函數(shù)創(chuàng)建 CFB 解密流。 解密密文,得出明文。

注意事項

  • 使用 CFB 模式不需要明文填充。 密鑰長度應為 16, 24 或 32 字節(jié),以匹配 AES-128, AES-192 或AES-256。 隨機 iv 很重要,每次加密都使用新的 iv 增強安全性。

到此這篇關于GO語言實現(xiàn)AES-CFB加密的文章就介紹到這了,更多相關GO語言 AES-CFB加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go?使用xorm操作mysql詳情

    Go?使用xorm操作mysql詳情

    這篇文章主要介紹了Go?使用xorm操作mysql詳情,golang?orm?庫?xorm?的使用和項目結構。更多詳細neural,需要的小伙伴可以參考下面文章內(nèi)容
    2022-01-01
  • 一文秒懂Go 編寫命令行工具的代碼

    一文秒懂Go 編寫命令行工具的代碼

    這篇文章主要介紹了一文秒懂Go 編寫命令行工具的代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • go語言求任意類型切片的長度操作

    go語言求任意類型切片的長度操作

    這篇文章主要介紹了go語言求任意類型切片的長度操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go?gRPC服務進階middleware使用教程

    Go?gRPC服務進階middleware使用教程

    這篇文章主要為大家介紹了Go?gRPC服務進階middleware的使用教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • golang 如何獲取map所有key的方式

    golang 如何獲取map所有key的方式

    這篇文章主要介紹了golang 獲取map所有key的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • golang time包的用法詳解

    golang time包的用法詳解

    這篇文章主要介紹了golang time包的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Go語言中GMP調(diào)度模型詳解

    Go語言中GMP調(diào)度模型詳解

    文章解釋了Go語言的GMP模型,介紹了G、M、P三者的定義、協(xié)作關系和調(diào)度策略,本文給大家介紹了Go語言中GMP調(diào)度模型,感興趣的朋友一起看看吧
    2026-05-05
  • 一文搞懂Golang中的內(nèi)存逃逸

    一文搞懂Golang中的內(nèi)存逃逸

    我們都知道go語言中內(nèi)存管理工作都是由Go在底層完成的,這樣我們可以不用過多的關注底層的內(nèi)存問題。本文主要總結一下?Golang內(nèi)存逃逸分析,需要的朋友可以參考以下內(nèi)容,希望對大家有幫助
    2022-09-09
  • golang常用庫之pkg/errors包第三方錯誤處理包案例詳解

    golang常用庫之pkg/errors包第三方錯誤處理包案例詳解

    這篇文章主要介紹了golang常用庫之pkg/errors包第三方錯誤處理包,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 基于Golang設計一套可控的定時任務系統(tǒng)

    基于Golang設計一套可控的定時任務系統(tǒng)

    這篇文章主要為大家學習介紹了如何基于Golang設計一套可控的定時任務系統(tǒng),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-07-07

最新評論

固始县| 安仁县| 扎兰屯市| 镇赉县| 辽中县| 乐至县| 新晃| 清丰县| 克拉玛依市| 河源市| 明星| 宁国市| 长武县| 阿巴嘎旗| 鸡西市| 广丰县| 高陵县| 文成县| 深水埗区| 车险| 墨玉县| 勃利县| 沙田区| 新津县| 利津县| 潮安县| 成都市| 青冈县| 大埔区| 金川县| 张家港市| 通渭县| 堆龙德庆县| 长沙县| 沈丘县| 淮滨县| 河北省| 咸阳市| 卢湾区| 措美县| 佛山市|