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

golang中使用aes加密的操作方法

 更新時間:2025年10月20日 17:04:22   作者:JO22Zs68T  
AES是一種對稱加密算法,適用于加密敏感數(shù)據(jù),通過上述方法,可在 Golang中實現(xiàn)AES加密/解密功能,本文給大家介紹golang中使用aes加密的操作方法,感興趣的朋友跟隨小編一起看看吧

AES 加密基礎(chǔ)

AES(Advanced Encryption Standard)是一種對稱加密算法,適用于加密敏感數(shù)據(jù)。Golang 的 crypto/aes 包提供了 AES 加密的實現(xiàn),通常結(jié)合 crypto/cipher 包使用。

生成密鑰

AES 密鑰長度需為 16(AES-128)、24(AES-192)或 32(AES-256)字節(jié)。

key := []byte("32-byte-long-key-here-1234567890") // AES-256 密鑰

加密數(shù)據(jù)

使用 CBC 模式(需填充)和隨機 IV(初始化向量):

import (
    "crypto/aes"
    "crypto/cipher"
    "crypto/rand"
    "io"
)
func encrypt(plaintext []byte, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    // 填充數(shù)據(jù)到塊大小
    plaintext = pkcs7Pad(plaintext, aes.BlockSize)
    // 生成隨機 IV
    ciphertext := make([]byte, aes.BlockSize+len(plaintext))
    iv := ciphertext[:aes.BlockSize]
    if _, err := io.ReadFull(rand.Reader, iv); err != nil {
        return nil, err
    }
    // 加密
    mode := cipher.NewCBCEncrypter(block, iv)
    mode.CryptBlocks(ciphertext[aes.BlockSize:], plaintext)
    return ciphertext, nil
}
// PKCS7 填充
func pkcs7Pad(data []byte, blockSize int) []byte {
    padding := blockSize - len(data)%blockSize
    padText := bytes.Repeat([]byte{byte(padding)}, padding)
    return append(data, padText...)
}

解密數(shù)據(jù)

解密時需提取 IV 并移除填充:

func decrypt(ciphertext []byte, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(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:]
    // 解密
    mode := cipher.NewCBCDecrypter(block, iv)
    mode.CryptBlocks(ciphertext, ciphertext)
    // 移除填充
    ciphertext = pkcs7Unpad(ciphertext)
    return ciphertext, nil
}
// PKCS7 去填充
func pkcs7Unpad(data []byte) []byte {
    length := len(data)
    unpadding := int(data[length-1])
    return data[:(length - unpadding)]
}

使用 GCM 模式(推薦)

GCM(Galois/Counter Mode)提供認證加密,無需手動填充:

func encryptGCM(plaintext []byte, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    gcm, err := cipher.NewGCM(block)
    if err != nil {
        return nil, err
    }
    nonce := make([]byte, gcm.NonceSize())
    if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
        return nil, err
    }
    return gcm.Seal(nonce, nonce, plaintext, nil), nil
}
func decryptGCM(ciphertext []byte, key []byte) ([]byte, error) {
    block, err := aes.NewCipher(key)
    if err != nil {
        return nil, err
    }
    gcm, err := cipher.NewGCM(block)
    if err != nil {
        return nil, err
    }
    nonceSize := gcm.NonceSize()
    if len(ciphertext) < nonceSize {
        return nil, fmt.Errorf("ciphertext too short")
    }
    nonce, ciphertext := ciphertext[:nonceSize], ciphertext[nonceSize:]
    return gcm.Open(nil, nonce, ciphertext, nil)
}

注意事項

  • 密鑰管理:密鑰需安全存儲,避免硬編碼。
  • IV/Nonce:每次加密需生成隨機 IV 或 Nonce,禁止重復(fù)使用。
  • 性能:GCM 模式適合高性能場景,CBC 需手動處理填充。

通過上述方法,可在 Golang 中實現(xiàn) AES 加密/解密功能,根據(jù)需求選擇 CBC 或 GCM 模式。

到此這篇關(guān)于golang中使用aes加密的文章就介紹到這了,更多相關(guān)go aes加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言中命令行參數(shù)解析工具pflag的使用指南

    Go語言中命令行參數(shù)解析工具pflag的使用指南

    在使用?Go?進行開發(fā)的過程中,命令行參數(shù)解析是我們經(jīng)常遇到的需求,于是?Go?社區(qū)中出現(xiàn)了一個叫?pflag?的第三方包,功能更加全面且足夠強大,下面我們就來看看它的具體使用吧
    2024-11-11
  • Go中的nil切片和空切片區(qū)別詳解

    Go中的nil切片和空切片區(qū)別詳解

    這篇文章主要介紹了Go中的nil切片和空切片區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • golang?墻上時鐘與單調(diào)時鐘的實現(xiàn)

    golang?墻上時鐘與單調(diào)時鐘的實現(xiàn)

    本文主要介紹了golang?墻上時鐘與單調(diào)時鐘的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • golang內(nèi)置net/http包的使用詳解

    golang內(nèi)置net/http包的使用詳解

    在Go語言中,內(nèi)置的net/http包提供了一種出色的方式來處理HTTP請求和響應(yīng),不僅功能強大,而且易于使用,本文將帶大家深入了解Go語言內(nèi)置的net/http包,揭示其強大的功能和用法,希望對大家有所幫助
    2023-11-11
  • go語言實現(xiàn)簡易比特幣系統(tǒng)之交易簽名及校驗功能

    go語言實現(xiàn)簡易比特幣系統(tǒng)之交易簽名及校驗功能

    這篇文章主要介紹了go語言實現(xiàn)簡易比特幣系統(tǒng)之交易簽名及校驗功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 一文精通管理多版本Go安裝教程

    一文精通管理多版本Go安裝教程

    這篇文章主要為大家介紹了一文精通管理多版本Go安裝教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • go實現(xiàn)文件的創(chuàng)建、刪除與讀取示例代碼

    go實現(xiàn)文件的創(chuàng)建、刪除與讀取示例代碼

    這篇文章主要給大家介紹了關(guān)于go如何實現(xiàn)文件的創(chuàng)建、刪除與讀取的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2019-02-02
  • Go語言編譯原理之源碼調(diào)試

    Go語言編譯原理之源碼調(diào)試

    這篇文章主要為大家介紹了Go語言編譯原理之源碼調(diào)試示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Golang使用gob實現(xiàn)結(jié)構(gòu)體的序列化過程詳解

    Golang使用gob實現(xiàn)結(jié)構(gòu)體的序列化過程詳解

    Golang struct類型數(shù)據(jù)序列化用于網(wǎng)絡(luò)傳輸數(shù)據(jù)或在磁盤上寫入數(shù)據(jù)。在分布式系統(tǒng)中,一端生成數(shù)據(jù)、然后序列化、壓縮和發(fā)送;在另一端,接收數(shù)據(jù)、然后解壓縮、反序列化和處理數(shù)據(jù),整個過程必須快速有效
    2023-03-03
  • Go語言使用sync.Mutex實現(xiàn)資源加鎖

    Go語言使用sync.Mutex實現(xiàn)資源加鎖

    數(shù)據(jù)共享是一把雙刃劍,Go語言為我們提供了?sync.Mutex,一種最基礎(chǔ)也是最常用的加鎖方式,用于保證在任意時刻只有一個 goroutine 能訪問共享資源,下面我們就來看看具體實現(xiàn)吧
    2025-08-08

最新評論

深水埗区| 贺州市| 静乐县| 祁连县| 广东省| 涪陵区| 滦平县| 鄂州市| 台前县| 临颍县| 剑阁县| 尼木县| 沐川县| 民权县| 无锡市| 山西省| 新乡县| 滨海县| 马鞍山市| 绍兴市| 康平县| 阿克苏市| 哈尔滨市| 成武县| 阿图什市| 金堂县| 安吉县| 张掖市| 凤山县| 延庆县| 大渡口区| 枣庄市| 建德市| 白朗县| 沁阳市| 慈利县| 门源| 邵武市| 平罗县| 翁牛特旗| 乌鲁木齐县|