RC4加密演算法的原理及實現

2021-09-08 04:01:35 字數 1794 閱讀 1261

rc4於2023年提出,和des演算法一樣。是一種對稱加密演算法,也就是說使用的金鑰為單鑰(或稱為私鑰)。

但不同於des的是。rc4不是對明文進行分組處理,而是位元組流的方式依次加密明文中的每個位元組。解密的時候也是依次對密文中的每個位元組進行解密。

rc4演算法的特點是演算法簡單,執行速度快。並且金鑰長度是可變的,可變範圍為1-256位元組(8-2048位元),在現在技術支援的前提下,當金鑰長度為128位元時,用暴力法搜尋金鑰已經不太可行,所以能夠預見rc4的金鑰範圍任然能夠在今後相當長的時間裡抵禦暴力搜尋金鑰的攻擊。實際上,現在也沒有找到對於128bit金鑰長度的rc4加密演算法的有效攻擊方法。

在介紹rc4演算法原理之前。先看看演算法中的幾個關鍵變數:

1、金鑰流:rc4演算法的關鍵是依據明文和金鑰生成相應的金鑰流,金鑰流的長度和明文的長度是相應的。也就是說明文的長度是500位元組,那麼金鑰流也是500位元組。當然,加密生成的密文也是500位元組。由於密文第i位元組=明文第i位元組^金鑰流第i位元組;

2、狀態向量s:長度為256。s[0],s[1].....s[255]。每乙個單元都是乙個位元組。演算法執行的不論什麼時候。s都包含0-255的8位元數的排列組合,僅僅只是值的位置發生了變換;

3、暫時向量t:長度也為256,每乙個單元也是乙個位元組。

假設金鑰的長度是256位元組。就直接把金鑰的值賦給t,否則,輪轉地將金鑰的每乙個位元組賦給t。

4、金鑰k:長度為1-256位元組。注意金鑰的長度keylen與明文長度、金鑰流的長度沒有必定關係。通常金鑰的長度趣味16位元組(128位元)。

rc4的原理分為三步:

1、初始化s和t

for i=0 to 255 do

s[i]=i;

t[i]=k[ imodkeylen ];

2、初始排列s

j=0;

for i=0 to 255 do

j= ( j+s[i]+t[i])mod256;

swap(s[i],s[j]);

3、產生金鑰流

i,j=0;

for r=0 to len do  //r為明文長度,r位元組

i=(i+1) mod 256;

j=(j+s[i])mod 256;

swap(s[i],s[j]);

t=(s[i]+s[j])mod 256;

k[r]=s[t];

以下給出rc4加密解密的c++實現:

加密類:

/*

加密類*/class rc4 }/*

初始排列狀態向量s。供keystream方法呼叫

*/void ranges()

解密類:

/*

解密類*/class rc4_decryption

/*解密方法,引數為解密檔名稱

明文:我愛小兔子!

密文:'柀l&t餥6洲

金鑰流:鎛膺嚬3屽u

解密檔案:我愛小兔子。

這是第一篇網路安全方面的部落格。如有錯誤,歡迎指正!

RC4加密演算法

rc4於1987年提出,和des演算法一樣,是一種對稱加密演算法,也就是說使用的金鑰為單鑰 或稱為私鑰 但不同於des的是,rc4不是對明文進行分組處理,而是位元組流的方式依次加密明文中的每乙個位元組,解密的時候也是依次對密文中的每乙個位元組進行解密。rc4演算法的特點是演算法簡單,執行速度快,而且...

RC4加密演算法

簡介 包括初始化演算法 ksa 和加密演算法兩大部分 主要 初始化部分 這個基本上是固定的 void rc4 init unsigned char s,unsigned char key,unsigned long len s最開始是傳入的長度為256的char型空陣列,用來存放初始化後的s key...

RC4加密演算法

rc4於1987年提出,和des演算法一樣,是一種對稱加密演算法,也就是說使用的金鑰為單鑰 或稱為私鑰 但不同於des的是,rc4不是對明文進行分組處理,而是位元組流的方式依次加密明文中的每乙個位元組,解密的時候也是依次對密文中的每乙個位元組進行解密。rc4演算法的特點是演算法簡單,執行速度快,而且...