RC4演算法實現

2021-08-07 18:01:13 字數 1468 閱讀 7926

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位元)。

5、演算法實現

[cpp]view plain

copy

template

<

class

t> 

inline

void

swap(t& i, t& j)    

class

rc4    

;    

/    

#include "rc4.h"  

void

rc4::setkey(

const

char

* key, 

intkeylen)    

intj = 0;    

for(

inti = 0; i < 256; i++)    

}    

void

rc4::transform(

char

* output, 

const

char

* input, 

intlen)    

}    

/    

#include 

#include 

#include 

#include "rc4.h"  

intmain()    

rc4 rc4encrypt, rc4decrypt;    

rc4encrypt.setkey(key, keylen);    

rc4decrypt.setkey(key, keylen);    

rc4encrypt.transform(output, input, strlen(input));    

printf("after encrypt: %s/n"

, output);    

rc4decrypt.transform(output, output, strlen(input));    

printf("after decrypt: %s/n"

, output);    

return

0;    

}    

RC4演算法實現

1 金鑰流 rc4演算法的關鍵是根據明文和金鑰生成相應的金鑰流,金鑰流的長度和明文的長度是對應的,也就是說明文的長度是500位元組,那麼金鑰流也是500位元組。當然,加密生成的密文也是500位元組,因為密文第i位元組 明文第i位元組 金鑰流第i位元組 2 狀態向量s 長度為256,s 0 s 1 s...

RC4金鑰演算法

rc4是面向位元組的序列密碼,乙個明文的位元組 8位元 與乙個金鑰的位元組進行異或就生成了乙個密文的位元組。乙個可以在金鑰流中生成一位元組的金鑰,包含從1到256位元組的任何位置。rc4演算法的結構非常簡單,由兩部分組成 金鑰排程演算法ksa和偽隨機金鑰序列生成演算法prga。1 金鑰排程演算法ks...

python學習之RC4演算法實現

rc4演算法是一種對稱加密演算法,即加密與解密的過程相同。假設其運算過程表示為rc4 key,data 其中key為金鑰,data為待處理的資料,則 密文 rc4 key,data data rc4 key,密文 也就是說,對一段資料 原文 做奇數次rc4運算,得到密文,做偶數次rc4運算,結果還是...