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運算,結果還是...