RC4加密解密實現

2021-08-11 03:53:04 字數 1436 閱讀 7512

首先引用下別人的圖吧很清晰的流程圖,加密解密都是同乙個金鑰流實現的。

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...