欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

包和導(dǎo)入

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

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

Encrypt 函數(shù)

// Encrypt 對(duì)明文進(jìn)行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)): 利用提供的密鑰生成一個(gè) AES 塊密碼。
  • iv(初始化向量)是 AES 塊大小(16 字節(jié))的隨機(jī)數(shù),確保同樣的明文每次加密結(jié)果不同。
  • 使用 cipher.NewCFBEncrypter 創(chuàng)建 CFB 加密
  • stream.XORKeyStream(ciphertext, plaintext): 用流加密對(duì)明文進(jìn)行加密,結(jié)果保存在 ciphertext 中。
  • 將 iv 和 ciphertext 合并為一個(gè)切片,然后使用 Base64 編碼生成字符串

Decrypt 函數(shù)

// Decrypt 對(duì)密文進(jìn)行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 塊密碼。
  • 驗(yàn)證密文長(zhǎng)度,確保其大于 AES 塊大小。 從解碼后的密文中提取 iv,其余部分為實(shí)際密文。 使用cipher.NewCFBDecrypter 函數(shù)創(chuàng)建 CFB 解密流。 解密密文,得出明文。

注意事項(xiàng)

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

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

相關(guān)文章

  • 一文詳解在Go中如何使用Viper來管理配置

    一文詳解在Go中如何使用Viper來管理配置

    Viper 是一個(gè)功能齊全的 Go 應(yīng)用程序配置庫(kù),支持很多場(chǎng)景。在本文中,我們將深入探討 Viper 的各種用法和使用場(chǎng)景,以幫助讀者更好地了解和使用 Viper 來管理應(yīng)用程序配置,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Golang分布式鎖詳細(xì)介紹

    Golang分布式鎖詳細(xì)介紹

    分布式鎖是控制分布式系統(tǒng)之間同步訪問共享資源的一種方式。如果不同的系統(tǒng)或是同一個(gè)系統(tǒng)的不同主機(jī)之間共享了一個(gè)或一組資源,那么訪問這些資源時(shí),需要通過一些互斥手段來防止彼此之間的干擾以保證一致性,在這種情況下,就需要使用分布式鎖了
    2022-10-10
  • Golang開發(fā)庫(kù)的集合及作用說明

    Golang開發(fā)庫(kù)的集合及作用說明

    這篇文章主要為大家介紹了Golang開發(fā)golang庫(kù)的集合及簡(jiǎn)單的作用說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • Go語言中Map的神奇操作小結(jié)

    Go語言中Map的神奇操作小結(jié)

    Map是一個(gè)強(qiáng)大而又有趣的工具,它可以幫助我們高效地存儲(chǔ)和操作鍵值對(duì)數(shù)據(jù),本文主要介紹了Go語言中Map的各種操作,包括增加、查找、刪除、遍歷等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • 夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總

    夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總

    這篇文章主要8為大家介紹了夯實(shí)Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2023-10-10
  • Go語言sync包與鎖實(shí)現(xiàn)限制線程對(duì)變量的訪問

    Go語言sync包與鎖實(shí)現(xiàn)限制線程對(duì)變量的訪問

    本文主要介紹了Go語言sync包與鎖實(shí)現(xiàn)限制線程對(duì)變量的訪問,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 詳解Golang官方中的一致性哈希組件

    詳解Golang官方中的一致性哈希組件

    這篇文章主要為大家詳細(xì)介紹了Golang官方中的一致性哈希組件的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • GPT回答:go語言和C語言切片對(duì)比

    GPT回答:go語言和C語言切片對(duì)比

    這篇文章主要為大家介紹了GPT回答:go語言和C語言切片對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • go通過編碼縮短字符串的長(zhǎng)度實(shí)現(xiàn)方法步驟

    go通過編碼縮短字符串的長(zhǎng)度實(shí)現(xiàn)方法步驟

    這篇文章主要為大家介紹了go通過編碼縮短字符串的長(zhǎng)度實(shí)現(xiàn)方法步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go設(shè)計(jì)模式之備忘錄模式講解和代碼示例

    Go設(shè)計(jì)模式之備忘錄模式講解和代碼示例

    備忘錄是一種行為設(shè)計(jì)模式, 允許生成對(duì)象狀態(tài)的快照并在以后將其還原,本文就通過代碼示例給大家講講Go備忘錄模式,感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08

最新評(píng)論