AES加密

AES加密算法詳解

AES(Advanced Encryption Standard)是一種對稱密鑰分組加密算法,用于保護電子數據的安全性。其核心特點是通過相同的密鑰進行加密和解密,屬于對稱加密體系。。以下從核心特性、加密流程及安全性三方面展開說明:

核心特性

密鑰長度:支持128位(AES-128)、192位(AES-192)和256位(AES-256),密鑰越長安全性越高[citation:5]。

分組長度:固定為128位(16字節),明文被分割成多個16字節塊獨立處理[citation:5]。

結構類型:采用SPN(Substitution-Permutation Network)結構,而非DES的Feistel結構,運算效率更高[citation:5]。

加密輪數:

128位密鑰:10輪

192位密鑰:12輪

256位密鑰:14輪

加密流程(以128位為例)

每輪操作包含四個步驟(最后一輪省略列混淆):
字節代換(SubBytes):通過S盒(非線性替換表)將每個字節映射為新值,提供混淆性。

行移位(ShiftRows):狀態矩陣的每一行循環左移(第0行不移,第1行移1位,依此類推)。

列混淆(MixColumns):對每列進行矩陣乘法,增強擴散性(最后一輪跳過此步)。

輪密鑰加(AddRoundKey):將當前輪密鑰與狀態矩陣逐字節異或(XOR)[citation:5]。

安全性分析

抗攻擊能力:對已知攻擊(如差分分析、線性分析)具有強抵抗力,128位密鑰需窮舉約3.52×103?次嘗試,當前算力不可行[citation:5]。

潛在風險:理論存在側信道攻擊(如功耗分析),但可通過硬件防護緩解[citation:5]。

Go語言實現AES加解密

以下代碼使用Go標準庫crypto/aes和crypto/cipher實現AES-128的CBC模式加解密,包含完整錯誤處理和密鑰生成邏輯:

package mainimport ("crypto/aes""crypto/cipher""crypto/rand""encoding/base64""errors""fmt""io"
)// 加密函數(CBC模式)
func encrypt(plaintext []byte, key []byte) (string, error) {// 校驗密鑰長度(必須16/24/32字節)if len(key) != 16 && len(key) != 24 && len(key) != 32 {return "", errors.New("invalid key size (must be 16, 24, or 32 bytes)")}// 創建AES加密塊block, err := aes.NewCipher(key)if err != nil {return "", err}// 填充明文至塊大小整數倍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 "", err}// 加密數據mode := cipher.NewCBCEncrypter(block, iv)mode.CryptBlocks(ciphertext[aes.BlockSize:], plaintext)// 返回Base64編碼結果return base64.StdEncoding.EncodeToString(ciphertext), nil
}// 解密函數(CBC模式)
func decrypt(ciphertextBase64 string, key []byte) ([]byte, error) {// 解碼Base64ciphertext, err := base64.StdEncoding.DecodeString(ciphertextBase64)if err != nil {return nil, err}// 校驗密鑰長度if len(key) != 16 && len(key) != 24 && len(key) != 32 {return nil, errors.New("invalid key size")}// 創建AES解密塊block, err := aes.NewCipher(key)if err != nil {return nil, err}// 分離IV和密文if len(ciphertext) < aes.BlockSize {return nil, errors.New("ciphertext too short")}iv := ciphertext[:aes.BlockSize]ciphertext = ciphertext[aes.BlockSize:]// 解密數據mode := cipher.NewCBCDecrypter(block, iv)mode.CryptBlocks(ciphertext, ciphertext)// 去除填充return pkcs7Unpad(ciphertext)
}// PKCS#7填充
func pkcs7Pad(data []byte, blockSize int) []byte {padding := blockSize - len(data)%blockSizepadText := bytes.Repeat([]byte{byte(padding)}, padding)return append(data, padText...)
}// PKCS#7去填充
func pkcs7Unpad(data []byte) ([]byte, error) {if len(data) == 0 {return nil, errors.New("empty data")}padding := int(data[len(data)-1])if padding > len(data) {return nil, errors.New("invalid padding")}return data[:len(data)-padding], nil
}func main() {key := []byte("32-byte-long-encryption-key-1234") // 32字節密鑰(AES-256)plaintext := "Hello, AES加密測試!"// 加密ciphertext, err := encrypt([]byte(plaintext), key)if err != nil {fmt.Println("加密失敗:", err)return}fmt.Printf("加密結果(Base64): %s\n", ciphertext)// 解密decrypted, err := decrypt(ciphertext, key)if err != nil {fmt.Println("解密失敗:", err)return}fmt.Printf("解密結果: %s\n", decrypted)
}

關鍵實現說明

密鑰管理

密鑰長度需嚴格匹配(16/24/32字節),可通過密鑰派生函數(如PBKDF2)從密碼生成[citation:2]。

安全警告:硬編碼密鑰僅用于演示,生產環境應使用密鑰管理系統(如HashiCorp Vault)[citation:2]。
初始化向量(IV)

IV需隨機生成且每次加密唯一,防止相同明文生成相同密文。

存儲時IV與密文拼接(無需保密)[citation:6]。
填充方案

使用PKCS#7填充確保明文長度為塊大小整數倍,解密后需驗證填充有效性[citation:6]。
加密模式選擇

示例采用CBC(密碼分組鏈接)模式,需注意其易受填充預言攻擊(如POODLE)。

替代方案:

GCM模式:支持認證加密(AEAD),推薦用于網絡傳輸[citation:5]。

CTR模式:無填充需求,適合流數據加密[citation:6]。

應用場景與最佳實踐

適用場景:

數據庫敏感字段加密(如用戶密碼、身份證號)

文件系統透明加密(如防泄密系統中的文檔自動加密)[citation:1]

TLS/SSL通信的數據鏈路層保護

安全建議:

定期輪換密鑰(如90天),使用密鑰版本控制[citation:2]。

結合HMAC進行完整性驗證,防止密文篡改。

敏感操作在安全環境(如SGX enclave)中進行[citation:3]。

可通過https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf深入理解AES數學原理。實際開發中推薦使用高級庫(如Tink)避免底層實現錯誤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84592.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84592.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84592.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于聯詠(Novatek )自動曝光中Lv值的計算方式實現猜想

目錄 一、常見Lv對應的實際場景 二、常見光圈值 三、最小二乘法計算SV中的系數K

[docker]鏡像操作:關于docker pull、save、load一些疑惑解答

在使用 Docker 的過程中&#xff0c;鏡像管理是極其重要的一環。無論是拉取、保存還是加載鏡像&#xff0c;每一個步驟都可能遇到一些疑問或者誤區。 本文將結合實際案例&#xff0c;對常見的 Docker 鏡像操作問題進行系統性總結&#xff0c;幫你更好地理解 Docker 鏡像的工作機…

SFTrack:面向警務無人機的自適應多目標跟蹤算法——突破小尺度高速運動目標的追蹤瓶頸

【導讀】 本文針對無人機&#xff08;UAV&#xff09;視頻中目標尺寸小、運動快導致的多目標跟蹤難題&#xff0c;提出一種更簡單高效的方法。核心創新在于從低置信度檢測啟動跟蹤&#xff08;貼合無人機場景特性&#xff09;&#xff0c;并改進傳統外觀匹配算法以關聯此類檢測…

什么是滲透測試,對網站安全有哪些幫助?

在網絡安全的戰場中&#xff0c;網站如同暴露在數字世界的堡壘&#xff0c;時刻面臨著黑客攻擊的威脅。而滲透測試&#xff0c;就像是為網站進行一場 “模擬攻防演練”&#xff0c;它以黑客的思維和手段&#xff0c;主動出擊&#xff0c;探尋網站潛在的安全漏洞。究竟什么是滲透…

KU115LPE-V10型FPGA加速卡

KU115LPE-V10是一款基于PCI Express總線通信的FPGA加速類產品。 該產品基于Xilinx公司的的高性能Kintex Ultra-Scale FPGA設計&#xff0c;配置最大兩組DDR4緩存單元&#xff0c;每組最大支持4GB容量&#xff0c;72bit&#xff08;包含ECC&#xff0c;8bit&#xff09;&#x…

【筆記】Blockchain

區塊鏈Blockchain是一種分布式數據庫技術&#xff0c;其核心特點在于去中心化、不可篡改和透明性。它通過一系列按照時間順序排列的數據塊&#xff08;即“區塊”&#xff09;組成&#xff0c;每個數據塊都包含了一定時間內的一系列信息交易&#xff0c;并通過密碼學方法確保這…

GitHub Desktop Failure when receiving data from the peer

目錄 安裝Github Desktop簡易省流助手 解決 Git 克隆時出現的 "Failure when receiving data from the peer" 錯誤1. 網絡連接問題原因&#xff1a;解決辦法&#xff1a; 2. Git 配置問題原因&#xff1a;解決辦法&#xff1a; 3. GitHub 服務故障原因&#xff1a;解…

疏錦行Python打卡 DAY 27 函數專題2:裝飾器

def logger(func):def wrapper(*args, **kwargs):print(f"開始執行函數 {func.__name__}&#xff0c;參數: {args}, {kwargs}")result func(*args, **kwargs)print(f"函數 {func.__name__} 執行完畢&#xff0c;返回值: {result}")return resultreturn wr…

大模型布署如何選擇GPU資源?

當前主流GPU型號及其顯存大小&#xff08;顯存“大小”&#xff09;的詳細分類匯總&#xff0c;結合消費級、專業工作站級及數據中心級三大應用場景&#xff0c;數據綜合自行業常用型號及最新產品信息&#xff08;截至2025年6月&#xff09;&#xff1a; &#x1f3ae; 一、消費…

目標檢測——YOLOv12算法解讀

論文&#xff1a;YOLOv12: Attention-Centric Real-Time Object Detectors (2025.2.18) 作者&#xff1a;Yunjie Tian, Qixiang Ye, David Doermann 鏈接&#xff1a;https://arxiv.org/abs/2502.12524 代碼&#xff1a;https://github.com/sunsmarterjie/yolov12 YOLO系列算法…

JavaEE-Maven

maven Maven是?個項?管理?具, 通過pom.xml?件的配置獲取jar包&#xff0c;?不??動去添加jar包。 maven簡單, ?便, 提?我們的開發效率, 減少我們的開發Bug。 IDEA本?已經集成了Maven, 我們可以直接使?, ?需安裝。 創建maven項目 name是項目名 location是項目路徑 …

使用 C/C++的OpenCV 實時播放火柴人愛心舞蹈動畫

使用 C/OpenCV 實時播放火柴人愛心舞蹈動畫 本文將介紹如何使用 C/OpenCV 庫實時創建一個動畫窗口&#xff1a;一個火柴人捧著愛心跳舞&#xff0c;同時另一個愛心從遠處飛來并逐漸變大。動畫會實時在 OpenCV 窗口中播放&#xff0c;直到用戶按下按鍵退出。 準備工作 確保你…

復現論文報錯解決

文章目錄 一、 The detected CUDA version (12.9) mismatches the version that was used to compile PyTorch (11.8)二、error -- unsupported GNU version! gcc versions later than 11 are not supported!三、Unknown encoder libx264四、下載速度太慢、無法遞歸下載項目 一…

Python 實現 Web 靜態服務器(HTTP 協議)

目錄 一、在本地啟動 HTTP 服務器1. Windows 下安裝 node.js1&#xff09;下載安裝包2&#xff09;配置環境變量3&#xff09;安裝鏡像4&#xff09;node.js 的常用命令 2. 安裝 http-server 服務3. 使用 http-server 開啟服務1&#xff09;使用 http-server2&#xff09;詳解 …

MPMA:Preference Manipulation Attack Against Model Context Protocol

概要 MCP作為提供給LLM作為工具調用的標準化協議被廣泛應用&#xff0c;但是MCP在安全方面還比較脆弱。本文提出了一種MPMA攻擊方法通過在工具的名字或描述中插入具有操控性的文字、短語來操控LLM選擇MCP server的過程。 不了解MCP的具體細節可以看看我寫的這篇文章MCP 場景…

Vim 替換命令完整學習筆記

Vim 替換命令完整學習筆記 文章目錄 Vim 替換命令完整學習筆記1. 核心概念2. 替換命令基本語法2.1 基本格式2.2 分隔符選擇2.3 范圍指定 3. 替換標志詳解3.1 基礎標志3.2 高級標志3.3 標志組合 4. 正則表達式在替換中的應用4.1 基礎正則表達式4.2 字符類和量詞4.3 分組和引用 5…

@RequestBody和@ResponseBody注解的作用是什么

@RequestBody和@ResponseBody注解的作用是什么 文章目錄 @RequestBody和@ResponseBody注解的作用是什么@RequestBody和@ResponseBody注解的作用是什么SpringMVC的請求與響應模型1. 請求的處理流程1.1 DispatcherServlet作為入口1.2 Handler處理器與Controller1.3 HandlerAdapte…

質因數分解_java

什么是質因數&#xff1f; 說的通俗一點就是&#xff0c;這個數既是因數&#xff0c;又是質數。但是1不是質因數(不是質數)。然后比如122*2*3&#xff0c;里邊的2&#xff0c;3都是質數&#xff0c;并且也是12的因數&#xff0c;所以2、3就是12的質因數。 因為本人很菜&#xf…

SpringDoc集成到Springboot

1.Maven引入jar包 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.14</version> </dependency> 2.新建OpenApiConfig文件&#xff0c;代碼如下 package com.elan…

Memory Repair (五)

Compression Algorithm and Fuse Box Organization 通常情況下&#xff0c;這部分信息對于實現BISR&#xff08;內置自修復&#xff09;并非必需&#xff0c;但對于診斷問題可能有所幫助。 Compression and Fuse Box Organization Overview BISR controller采用的壓縮算法基于兩…