首先引用下別人的圖吧很清晰的流程圖,加密解密都是同乙個金鑰流實現的。1、第一步是生成s盒
初始化s和t
開始時,s中元素的值被置為按公升序從0到255,即s[0]=0,s[1]=1,…,s[255]=255。同時建立乙個臨時向量t(長度與s相同)。如果金鑰k的長度為256位元組,則將k賦給t(k的長度為可能小於s的長度)。否則,若金鑰長度為keylen位元組,則將k的值賦給t的前keylen個元素,並迴圈重複用k的值賦給t剩下的元素,直到t的所有元素都被賦值。
這些預操作用以下偽**概括如下:
for i=0 to 255 do
s[i] =i
t[i]=k[ i mod keylen ] //使用給定的金鑰k,t為臨時向量
2、初始排列s
然後用t產生s的初始置換.從s[0]到s [255],對每個s[i],根據由t[i]確定的方案,將s[i]置換為s中的另一位元組:
j=0
for i=0 to 255 do
j=(j+s[i]+t[i])mod 256
swap(s[i],s[j])
上面1、2兩步為秘鑰排程演算法(ksa),下面第3步為偽隨機生成演算法(prga)。
3、產生金鑰流
向量s一旦完成初始化,輸人金鑰就不再被使用。金鑰流的生成是從s[0]到s[255],對每個s[i],根據當前s的值,將s[i]與s中的另一位元組置換。當s[255]完成置換後,操作繼續重複,從s[0]開始:
i=0,j=0
for r=0 to len do //len為明文長度,位元組
i=(i+1) mod 256
j=(j+s[i])mod 256
swap(s[i],s[j])
t=(s[i]+s[j]) mod 256
key=s[t]
4、最後進行異或運算
data與key按位異或操作
#include
#include
template
inline
void
swap(t& i, t& j)
class rc4
; //初始化s盒
void rc4::setkey(char* k, int keylen)
int j = 0;
for (int i = 0; i < 256; i++)
} //生成金鑰流
void rc4::transform(char* output, const
char* data, int len)
} int main()
RC4加密 解密
建立rc4crypto類 using system using system.collections.generic using system.linq using system.text using system.web namespace rc.web.utility 有參構造器 密碼 publ...
RC4加密解密演算法
介紹 rc4 來自rivest cipher 4的縮寫 是一種流加密演算法,金鑰長度可變。它加解密使用相同的金鑰,因此也屬於對稱加密演算法。rc4是有線等效加密 wep 中採用的加密演算法,也曾經是tls可採用的演算法之一。rc4演算法特點 1 演算法簡潔易於軟體實現,加密速度快,安全性比較高 2 ...
RC4加密隨筆
1.原理 1.1 初始化金鑰 根據輸入的金鑰key,使用金鑰排程演算法ksa生成乙個256位元組的sbox。1.2 再通過偽隨機數生成演算法 prga 得到金鑰流 keystream 1.3 加密 金鑰流與明文進行異或運算得到密文 1.4 解密 密文與金鑰流進行異或運算得到明文 2.金鑰排程演算法k...