C 常用加密方法一 AES 與 DES

2022-08-02 19:51:08 字數 2766 閱讀 3347

對稱性加密演算法

des (data encryption standard 資料加密演算法) 與 aes (advanced encryption standard 高階加密標準),都是一種對稱加密演算法,既加密和解密使用同乙個金鑰。

塊加密演算法

aes 與 des 同樣都是一種塊加密演算法,會把明文按等長的塊然後分別進行加密。不同之處在於des 的金鑰長度為 56 位加 8 位奇偶校驗位(每組的第8位作為奇偶校驗位),而aes 的金鑰長度為 128,192或256位(在 c# 中為 256 位)。

由於 des 的金鑰長度過,des 被認為是不安全的,已被 aes 所取代。

塊加密演算法模式

在 c# 中,塊加密演算法支援 5 種模式,分別為ecb、cbc、cfb、ofb、cts。其中在cbc、cfb、ofb模式下需要用到加密向量:iv (initialization vector),它是為了保證對同一明文加密時不會產生相同的密文。而ecb、cbc模式會將長度不足的源資料填充至金鑰的整數倍,其餘三種模式則保持長度不變,這主要是加密時的異或操作導致的。

ecb (electronic codebook電碼本)

ecb 相對比較簡單,原理是將資料切割後,對每一塊單獨進行加密,不需要開頭所說的 iv(加密向量)。

這樣做的優點是可以並行處理,速度可以非常快;缺點也很明顯,在源資料跟金鑰不變的情況下,加密後的資料都是一樣的。

未加密時

ecb 加密

cbc (cipher block chaining密碼分組鏈結)

cbc 不同於 ecb 的是,它會將第一塊與 iv 異或之後再進行加密,之後再以前一塊的加密資料作為 iv,再對後一塊進行加密;而解密時可以直接利用前一塊的密文,因此可以並行執行。

cbc 的優點是安全性比較好,不過缺點是加密的速度會比較慢。而且由於加密時的序列性,若之前的源明文發生改變,那往後密文也會全部改變;而解密時,密文的改變只會導致對應塊解密後的明文發生變化,以及下一塊的對應位改變(解密的資料需要與上一塊密文異或)。

將加密資料的某一位改變後的結果:

明文:some information about aes encryption method.

解密:x?z????od??1^? about a*s encryption method.

cfb (cipher feedback密碼反饋)在 cfb 模式中,是對向量進行加密,再與明文進行異或操作,密文再作為向量參與下乙個加密。所謂反饋,就是指前乙個密文作為下一次加密的輸入,再進行加密。

cfb 在解密時,也是用的加密器,因此解密過程與 cbc 的加密過程是一樣的。

ofb (output feedback 輸出反饋)

類似於 cfb 模式,先對向量加密,加密結果與明文進行異或,同時作為下乙個加密的向量;其解密過程則與加密過程

ctr (counter 整數計數器)

ctr 模式通過加密乙個連續的「計數器」來生成金鑰塊,計數器可以用任何方法來生成。由於這種特性,ctr 的加密可以並行執行。

c# **:

private

void

aestest()

encrypted =msencrypt.toarray();}}

icryptotransform decryptor =aes.createdecryptor(aes.key, aes.iv);

using (memorystream msdecrypt = new

memorystream(encrypted))}}

}}

view code

des 與 aes 的用法基本相同,只是密碼與向量的長度不一樣。

對稱加密之DES與AES

金鑰加密也稱為對稱加密,速度快,但加密和解密的鑰匙必須相同,只有通訊雙方才能知道鑰匙。高階資料加密標準 aes author 尹勇 public class aesdome public static void main string args throws exception author 尹勇 ...

C 實現DES加密解密,AES加密解密

des演算法描述簡介 des是data encryption standard 資料加密標準 的縮寫。它是由ibm公司研製的一種加密演算法,美國國家標準局於1977年公布把它作為非機要部門使用的資料加密標準 它是乙個分組加密演算法,他以64位為分組對資料加密。同時des也是乙個對稱演算法 加密和解密...

C 中使用DES和AES加密解密

c 中使用des和aes加密解密 using system using system.text using system.security.cryptography using system.io namespace mycryptography 獲取向量 private static string...