- 密碼學教程
- 密碼學 - 首頁
- 密碼學 - 起源
- 密碼學 - 歷史
- 密碼學 - 原理
- 密碼學 - 應用
- 密碼學 - 優點與缺點
- 密碼學 - 現代密碼學
- 密碼學 - 傳統密碼
- 密碼學 - 加密的需求
- 密碼學 - 雙重強度加密
- 密碼系統
- 密碼系統
- 密碼系統 - 組成部分
- 密碼系統攻擊
- 密碼系統 - 彩虹表攻擊
- 密碼系統 - 字典攻擊
- 密碼系統 - 暴力破解攻擊
- 密碼系統 - 密碼分析技術
- 密碼學型別
- 密碼系統 - 型別
- 公鑰加密
- 現代對稱金鑰加密
- 密碼學雜湊函式
- 金鑰管理
- 密碼系統 - 金鑰生成
- 密碼系統 - 金鑰儲存
- 密碼系統 - 金鑰分發
- 密碼系統 - 金鑰撤銷
- 分組密碼
- 密碼系統 - 流密碼
- 密碼學 - 分組密碼
- 密碼學 - Feistel分組密碼
- 分組密碼的工作模式
- 分組密碼的工作模式
- 電子密碼本 (ECB) 模式
- 密碼分組連結 (CBC) 模式
- 密碼反饋 (CFB) 模式
- 輸出反饋 (OFB) 模式
- 計數器 (CTR) 模式
- 古典密碼
- 密碼學 - 反向密碼
- 密碼學 - Caesar 密碼
- 密碼學 - ROT13 演算法
- 密碼學 - 置換密碼
- 密碼學 - 加密置換密碼
- 密碼學 - 解密置換密碼
- 密碼學 - 乘法密碼
- 密碼學 - 仿射密碼
- 密碼學 - 簡單替換密碼
- 密碼學 - 簡單替換密碼的加密
- 密碼學 - 簡單替換密碼的解密
- 密碼學 - 維吉尼亞密碼
- 密碼學 - 維吉尼亞密碼的實現
- 現代密碼
- Base64 編碼與解碼
- 密碼學 - XOR 加密
- 替換技術
- 密碼學 - 單表代換密碼
- 密碼學 - 單表代換密碼的破解
- 密碼學 - 多表代換密碼
- 密碼學 - Playfair 密碼
- 密碼學 - Hill 密碼
- 多表代換密碼
- 密碼學 - 一次性密碼本
- 一次性密碼本的實現
- 密碼學 - 置換技術
- 密碼學 - 柵欄密碼
- 密碼學 - 列置換密碼
- 密碼學 - 隱寫術
- 對稱演算法
- 密碼學 - 資料加密
- 密碼學 - 加密演算法
- 密碼學 - 資料加密標準 (DES)
- 密碼學 - 三重 DES
- 密碼學 - 雙重 DES
- 高階加密標準 (AES)
- 密碼學 - AES 結構
- 密碼學 - AES 變換函式
- 密碼學 - 位元組代換變換
- 密碼學 - 行移位變換
- 密碼學 - 列混淆變換
- 密碼學 - 輪金鑰加變換
- 密碼學 - AES 金鑰擴充套件演算法
- 密碼學 - Blowfish 演算法
- 密碼學 - SHA 演算法
- 密碼學 - RC4 演算法
- 密碼學 - Camellia 加密演算法
- 密碼學 - ChaCha20 加密演算法
- 密碼學 - CAST5 加密演算法
- 密碼學 - SEED 加密演算法
- 密碼學 - SM4 加密演算法
- IDEA - 國際資料加密演算法
- 公鑰(非對稱)密碼演算法
- 密碼學 - RSA 演算法
- 密碼學 - RSA 加密
- 密碼學 - RSA 解密
- 密碼學 - 建立 RSA 金鑰
- 密碼學 - RSA 密碼的破解
- 密碼學 - ECDSA 演算法
- 密碼學 - DSA 演算法
- 密碼學 - Diffie-Hellman 演算法
- 密碼學中的資料完整性
- 密碼學中的資料完整性
- 訊息認證
- 密碼學數字簽名
- 公鑰基礎設施 (PKI)
- 雜湊
- MD5 (訊息摘要演算法 5)
- SHA-1 (安全雜湊演算法 1)
- SHA-256 (安全雜湊演算法 256 位)
- SHA-512 (安全雜湊演算法 512 位)
- SHA-3 (安全雜湊演算法 3)
- 雜湊密碼
- Bcrypt 雜湊模組
- 現代密碼學
- 量子密碼學
- 後量子密碼學
- 密碼協議
- 密碼學 - SSL/TLS 協議
- 密碼學 - SSH 協議
- 密碼學 - IPsec 協議
- 密碼學 - PGP 協議
- 影像和檔案加密
- 密碼學 - 影像
- 密碼學 - 檔案
- 隱寫術 - 影像
- 檔案加密和解密
- 密碼學 - 檔案加密
- 密碼學 - 檔案解密
- 物聯網中的密碼學
- 物聯網安全挑戰、威脅和攻擊
- 物聯網安全的加密技術
- 物聯網裝置的通訊協議
- 常用密碼技術
- 自定義構建密碼演算法(混合密碼學)
- 雲密碼學
- 量子密碼學
- 密碼學中的影像隱寫術
- DNA 密碼學
- 密碼學中的一次性密碼 (OTP) 演算法
- 區別
- 密碼學 - MD5 與 SHA1 的比較
- 密碼學 - RSA 與 DSA 的比較
- 密碼學 - RSA 與 Diffie-Hellman 的比較
- 密碼學與密碼學的比較
- 密碼學 - 密碼學與密碼分析的比較
- 密碼學 - 古典密碼學與量子密碼學的比較
- 密碼學與隱寫術的比較
- 密碼學與加密的比較
- 密碼學與網路安全的比較
- 密碼學 - 流密碼與分組密碼的比較
- 密碼學 - AES 與 DES 密碼的比較
- 密碼學 - 對稱加密與非對稱加密的比較
- 密碼學有用資源
- 密碼學 - 快速指南
- 密碼學 - 討論
密碼學 - 輪金鑰加變換
高階加密標準 (AES) 使用許多不同的變換來加密和解密資料。其中一種變換是輪金鑰加 (AddRoundKey)。
輪金鑰加需要在加密過程中在資料塊和不同的加密金鑰之間輪換。就像一個秘密程式碼,這個金鑰被故意用來擾亂資料。
工作原理?
輪金鑰加變換是高階加密標準 (AES) 密碼技術中的一個步驟。必須使用此過程來加密和解密資料。其工作原理如下:
- 金鑰加 - 在輪金鑰加變換中,資料的每個位元組都使用簡單的按位異或 (XOR) 運算與加密金鑰的相應位元組組合。這意味著如果資料中的位和金鑰中相應的位不同,則加密資料中的結果位將設定為 1;否則,它將設定為 0。
- 金鑰擴充套件 - 此過程在應用輪金鑰加變換之前加密加密金鑰。此過程為每個加密輪建立一個唯一的輪金鑰集。
- 輪金鑰 - 每個輪金鑰都是從原始加密金鑰建立的,並用於加密特定輪的資料。輪金鑰加變換將輸入的每個位元組與其對應的輪金鑰位元組組合以產生加密輸出。
特點
- AES 加密的每個週期都有一個唯一的金鑰。
- 使用輪金鑰加變換,每個資料位元組都與其對應的輪金鑰位元組進行異或運算。
- 當資料進行異或運算時,未經授權的實體將難以解碼加密的傳輸。
- 透過為每一輪使用不同的金鑰,AES 提高了加密的複雜性和安全性。
Python 實現
這段 Python 程式碼使用列表推導式和 Python 內建的 zip 函式,迭代資料和輪金鑰的相應位元組,將 XOR 運算子 (\^) 應用於每一對位元組,以實現輪金鑰加。
示例
def addRoundKey(data, round_key):
return bytes(a ^ b for a, b in zip(data, round_key))
# function execution
data = b'\x12\x34\x56\x78'
round_key = b'\xAB\xCD\xEF\x01'
encrypted_data = addRoundKey(data, round_key)
print("The Encrypted Data:", encrypted_data.hex())
以下是上述示例的輸出:
輸入/輸出
The Encrypted Data: b9f9b979
Java 實現
現在我們將使用 Java 來實現輪金鑰加變換。Java 使用一個簡單的迴圈來迭代資料和輪金鑰的每個位元組,以執行 XOR 運算 (^)。Java 的原始陣列型別 byte[] 用於儲存資料和輪金鑰。因此程式碼如下:
示例
public class AddRoundKey {
public static byte[] addRoundKey(byte[] data, byte[] roundKey) {
byte[] encryptedData = new byte[data.length];
for (int i = 0; i < data.length; i++) {
encryptedData[i] = (byte) (data[i] ^ roundKey[i]);
}
return encryptedData;
}
public static void main(String[] args) {
byte[] data = {(byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78};
byte[] roundKey = {(byte) 0xAB, (byte) 0xCD, (byte) 0xEF, (byte) 0x01};
byte[] encryptedData = addRoundKey(data, roundKey);
System.out.print("Encrypted Data: ");
for (byte b : encryptedData) {
System.out.printf("%02X ", b);
}
}
}
以下是上述示例的輸出:
輸入/輸出
Encrypted Data: B9F9B979
C++ 實現
此 C++ 實現使用 std::vector 來儲存資料和輪金鑰。一個簡單的 for 迴圈用於迭代資料和輪金鑰的每個位元組,以執行 XOR 運算 (^)。然後,加密後的資料儲存在另一個 std::vector 中。程式碼如下:
示例
#include <iostream>
#include <vector>
std::vector<unsigned char> addRoundKey(const std::vector<unsigned char>& data, const std::vector<unsigned char>& roundKey) {
std::vector<unsigned char> encryptedData;
for (size_t i = 0; i < data.size(); ++i) {
encryptedData.push_back(data[i] ^ roundKey[i]);
}
return encryptedData;
}
int main() {
std::vector<unsigned char> data = {0x12, 0x34, 0x56, 0x78};
std::vector<unsigned char> roundKey = {0xAB, 0xCD, 0xEF, 0x01};
std::vector<unsigned char> encryptedData = addRoundKey(data, roundKey);
std::cout << "Encrypted Data: ";
for (auto byte : encryptedData) {
printf("%02X ", byte);
}
return 0;
}
以下是上述示例的輸出:
輸入/輸出
Encrypted Data: B9 F9 B9 79
總結
輪金鑰加變換是高階加密標準 (AES) 密碼技術的重要組成部分。使用按位異或 (XOR) 方法將資料的每個位元組與加密金鑰的相應位元組組合。Python、Java 和 C++ 中都有輪金鑰加的實現。所有實現的過程都是相同的:迭代輪金鑰和相關資料位元組,對結果進行異或運算,最後返回加密資料。
廣告