當前位置:首頁 » 操作系統 » rc4演算法解密

rc4演算法解密

發布時間: 2022-05-21 07:40:16

『壹』 RC4演算法的詳細介紹

RC4加密演算法
之所以稱其為簇,是由於其核心部分的S-box長度可為任意,但一般為256位元組。該演算法的速度可以達到DES加密的10倍左右。
RC4演算法的原理很簡單,包括初始化演算法和偽隨機子密碼生成演算法兩大部分。假設S-box長度和密鑰長度均為n。先來看看演算法的初始化部分(用類C偽代碼表示):
for (i=0; i<n; i++){
s[i]=i;
}
j=0;
for (i=0; i<n; i++)
{
j=(j+s[i]+k[i])%n;
swap(s[i], s[j]);
}
在初始化的過程中,密鑰的主要功能是將S-box攪亂,i確保S-box的每個元素都得到處理,j保證S-box的攪亂是隨機的。而不同的S-box在經過偽隨機子密碼生成演算法的處理後可以得到不同的子密鑰序列,並且,該序列是隨機的:
i=j=0;
while (明文未結束)
{
++i%=n;
j=(j+s)%n;
swap(s, s[j]);
sub_k=s((s+s[j])%n);
}
得到的子密碼sub_k用以和明文進行xor運算,得到密文,解密過程也完全相同。
由於RC4演算法加密是採用的xor,所以,一旦子密鑰序列出現了重復,密文就有可能被破解。關於如何破解xor加密,請參看Bruce Schneier的Applied Cryptography一書的1.4節Simple XOR,在此我就不細說了。那麼,RC4演算法生成的子密鑰序列是否會出現重復呢?經過我的測試,存在部分弱密鑰,使得子密鑰序列在不到100萬位元組內就發生了完全的重復,如果是部分重復,則可能在不到10萬位元組內就能發生重復,因此,推薦在使用RC4演算法時,必須對加密密鑰進行測試,判斷其是否為弱密鑰。
但在2001年就有以色列科學家指出RC4加密演算法存在著漏洞,這可能對無線通信網路的安全構成威脅。
以色列魏茨曼研究所和美國思科公司的研究者發現,在使用「有線等效保密規則」(WEP)的無線網路中,在特定情況下,人們可以逆轉RC4演算法的加密過程,獲取密鑰,從而將已加密的信息解密。實現這一過程並不復雜,只需要使用一台個人電腦對加密的數據進行分析,經過幾個小時的時間就可以破譯出信息的全部內容。
專家說,這並不表示所有使用RC4演算法的軟體都容易泄密,但它意味著RC4演算法並不像人們原先認為的那樣安全。這一發現可能促使人們重新設計無線通信網路,並且使用新的加密演算法。

『貳』 誰會基於linux操作系統下C++ ,加、解密的程序開發,要求用RC4演算法。

直接上代碼。本地測試通過。


RC4Encrypt.h

typedef unsigned char uchar;
typedef unsigned long ulong;
class RC4Encrypt
{
private:
public:
void init(uchar* s, uchar* key, ulong len);
void encrypt(uchar* s, uchar* data, ulong len);
void decrypt(uchar* s, uchar* data, ulong len);
};


RC4Encrypt.cpp

#include "RC4Encrypt.h"
void RC4Encrypt::init(uchar* s, uchar* key, ulong len)
{
int i = 0, j = 0;
char k[256] = {0};
uchar tmp = 0;
for(i=0; i<256; ++i)
{
s[i] = i;
k[i] = key[i%len];
}
for(i=0; i<256; ++i)
{
j = (j+s[i]+k[j])%256;
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
void RC4Encrypt::encrypt(uchar* s, uchar* data, ulong len)
{
int i = 0, j = 0, t = 0;
ulong k = 0;
uchar tmp;
for(k=0; k<len; ++k)
{
i=(i+1)%256;
j=(j+s[i])%256;
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
t = (s[i]+s[j])%256;
data[k] ^= s[t];
}
}
void RC4Encrypt::decrypt(uchar* s, uchar* data, ulong len)
{
return RC4Encrypt::encrypt(s, data, len);
}



main.cpp


#include "RC4Encrypt.h"
#include <stdio.h>
#include <string.h>
int main()
{
uchar s[256] = {0}, s2[256] = {0};
char key[256] = {"this is the key for encrypting"};
ulong len = strlen(key);
char pData[512] = {"this is the test data"};

RC4Encrypt rc4;
rc4.init(s, (uchar*)key, strlen(key) );
rc4.encrypt(s, (uchar*)pData, len);
printf("encrypt result:%s ", pData);
rc4.init(s, (uchar*)key, strlen(key) );
rc4.decrypt(s, (uchar*)pData, len);
printf("decrypt result:%s ", pData);
return 0;
}

『叄』 RC4 與 DES 哪個演算法最安全

隨機密鑰加密演算法:RC4
位密碼演算法:DES 三重DES(Triple-DES)仍然是很安全的,但是也只是在別無他法的情況下的一個較好的選擇。顯然高級加密標准(AES)是一個更好的加密演算法,NIST用AES代替Triple-DES作為他們的標准(下面有更詳細的討論)。其他較好的演算法包括另外兩個AES的變種演算法Twofish和Serpent-也稱為CAST-128,它是效率和安全的完美結合。這幾個演算法不僅比DES更安全,而且也比DES的速度更快。為什麼要使用一些又慢又不安全的演算法呢?SHA1是一個哈希函數,而不是一個加密函數。作為一個哈希函數,SHA1還是相當優秀的,但是還需要幾年的發展才能用作加密演算法。如果你正在設計一個新系統,那麼謹記你可能會在若干年後用SHA1代替目前的演算法。我再重復一遍:只是可能。呵呵,希望能幫到你!謝謝望採納哦!

『肆』 怎麼解密rc4加密的word文件

推薦用Advanced.Office.Password.Recovery破解加密碼的office文檔,如果屬於「弱密碼」很容易破解。密碼強度高了(如密碼位數多、數字和字母、特殊符號組合等),破解很費時間。

『伍』 VC++ RC4,加密解密, 使用問題

#include "rc4.h"

void main()
{
char key[]="abcd";
RC4_KEY stKey;
BYTE d1[4]={0x11,0x22,0x33,0x44};

//加密
RC4Init(key,strlen(key),&stKey);
RC4Works(d1,4,&stKey);

//解密
RC4Init(key,strlen(key),&stKey);
RC4Works(d1,4,&stKey);
}

『陸』 用c/c++實現RC4演算法(n=3)利用生成的密鑰對「this is a test 」進行加/解密(按對應位作模2加運算)

頭文件什麼的我就不打了.........
關鍵部分:
string s;
getline(cin,s,'\n')
for (int q=0;q<s.length();q++)
if (s[q]>='a'&&s[q]<='z')
s[q]=(s[q]-『a'』+2)%26+'a'

cout<<<s;//此時s就是加密後的 如果把加密後的還原 把上面的+2改成-2

『柒』 uniapp如何加密解密rc4

uniapp如何加密解密rc4步驟:
1、第一步是生成S盒
2、初始排列S然後用T產生S的初始置換.從S到S255,對每個Si,根據由Ti確定的方案,將Si置換為S中的另一位元組
3、產生密鑰流矢量S一旦完成初始化,輸人密鑰就不再被使用。
4、最後進行異或運算data與key按位異或操作

『捌』 RC4的RC4加密演算法

RC4加密演算法是大名鼎鼎的RSA三人組中的頭號人物Ronald Rivest在1987年設計的密鑰長度可變的流加密演算法簇。之所以稱其為簇,是由於其核心部分的S-box長度可為任意,但一般為256位元組。該演算法的速度可以達到DES加密的10倍左右,且具有很高級別的非線性。RC4起初是用於保護商業機密的。但是在1994年9月,它的演算法被發布在互聯網上,也就不再有什麼商業機密了。RC4也被叫做ARC4(Alleged RC4——所謂的RC4),因為RSA從來就沒有正式發布過這個演算法。

『玖』 易語言與PHP RC4加密解密的問題

位密碼演算法:DES 三重DES(Triple-DES)仍然是很安全的,但是也只是在別無他法的情況下的一個較好的選擇。顯然高級加密標准(AES)是一個更好的加密演算法,NIST用AES代替Triple-DES作為他們的標准(下面有更詳細的討論)。其他較好的演算法包括另外兩個AES的變種演算法Twofish和Serpent-也稱為CAST-128,它是效率和安全的完美結合。這幾個演算法不僅比DES更安全,而且也比DES的速度更快。為什麼要使用一些又慢又不安全的演算法呢?SHA1是一個哈希函數,而不是一個加密函數。作為一個哈希函數,SHA1還是相當優秀的,但是還需要幾年的發展才能用作加密演算法。如果你正在設計一個新系統,那麼謹記你可能會在若干年後用SHA1代替目前的演算法。我再重復一遍:只是可能。呵呵,希望能幫到你!謝謝望採納哦!

『拾』 RC4的原理

RC4演算法的原理很簡單,包括初始化演算法(KSA)和偽隨機子密碼生成演算法(PRGA)兩大部分。假設S-box的長度為256,密鑰長度為Len。先來看看演算法的初始化部分(用C代碼表示):
其中,參數1是一個256長度的char型數組,定義為: unsigned char sBox[256];
參數2是密鑰,其內容可以隨便定義:char key[256];
參數3是密鑰的長度,Len = strlen(key); /*初始化函數*/voidrc4_init(unsignedchar*s,unsignedchar*key,unsignedlongLen){inti=0,j=0;chark[256]={0};unsignedchartmp=0;for(i=0;i<256;i++){s[i]=i;k[i]=key[i%Len];}for(i=0;i<256;i++){j=(j+s[i]+k[i])%256;tmp=s[i];s[i]=s[j];//交換s[i]和s[j]s[j]=tmp;}}在初始化的過程中,密鑰的主要功能是將S-box攪亂,i確保S-box的每個元素都得到處理,j保證S-box的攪亂是隨機的。而不同的S-box在經過偽隨機子密碼生成演算法的處理後可以得到不同的子密鑰序列,將S-box和明文進行xor運算,得到密文,解密過程也完全相同。
再來看看演算法的加密部分(用C代碼表示):
其中,參數1是上邊rc4_init函數中,被攪亂的S-box;
參數2是需要加密的數據data;
參數3是data的長度. /*加解密*/voidrc4_crypt(unsignedchar*s,unsignedchar*Data,unsignedlongLen){inti=0,j=0,t=0;unsignedlongk=0;unsignedchartmp;for(k=0;k<Len;k++){i=(i+1)%256;j=(j+s[i])%256;tmp=s[i];s[i]=s[j];//交換s[x]和s[y]s[j]=tmp;t=(s[i]+s[j])%256;Data[k]^=s[t];}}最後,在main函數中,調用順序如下: intmain(){unsignedchars[256]={0},s2[256]={0};//S-boxcharkey[256]={justfortest};charpData[512]=這是一個用來加密的數據Data;unsignedlonglen=strlen(pData);inti;printf(pData=%s ,pData);printf(key=%s,length=%d ,key,strlen(key));rc4_init(s,(unsignedchar*)key,strlen(key));//已經完成了初始化printf(完成對S[i]的初始化,如下: );for(i=0;i<256;i++){printf(%02X,s[i]);if(i&&(i+1)%16==0)putchar(' ');}printf( );for(i=0;i<256;i++)//用s2[i]暫時保留經過初始化的s[i],很重要的!!!{s2[i]=s[i];}printf(已經初始化,現在加密: );rc4_crypt(s,(unsignedchar*)pData,len);//加密printf(pData=%s ,pData);printf(已經加密,現在解密: );//rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密鑰rc4_crypt(s2,(unsignedchar*)pData,len);//解密printf(pData=%s ,pData);return0;}因此最終的完整程序是: //程序開始#include<stdio.h>#include<string.h>typedefunsignedlongULONG;/*初始化函數*/voidrc4_init(unsignedchar*s,unsignedchar*key,unsignedlongLen){inti=0,j=0;chark[256]={0};unsignedchartmp=0;for(i=0;i<256;i++){s[i]=i;k[i]=key[i%Len];}for(i=0;i<256;i++){j=(j+s[i]+k[i])%256;tmp=s[i];s[i]=s[j];//交換s[i]和s[j]s[j]=tmp;}}/*加解密*/voidrc4_crypt(unsignedchar*s,unsignedchar*Data,unsignedlongLen){inti=0,j=0,t=0;unsignedlongk=0;unsignedchartmp;for(k=0;k<Len;k++){i=(i+1)%256;j=(j+s[i])%256;tmp=s[i];s[i]=s[j];//交換s[x]和s[y]s[j]=tmp;t=(s[i]+s[j])%256;Data[k]^=s[t];}}intmain(){unsignedchars[256]={0},s2[256]={0};//S-boxcharkey[256]={justfortest};charpData[512]=這是一個用來加密的數據Data;unsignedlonglen=strlen(pData);inti;printf(pData=%s ,pData);printf(key=%s,length=%d ,key,strlen(key));rc4_init(s,(unsignedchar*)key,strlen(key));//已經完成了初始化printf(完成對S[i]的初始化,如下: );for(i=0;i<256;i++){printf(%02X,s[i]);if(i&&(i+1)%16==0)putchar(' ');}printf( );for(i=0;i<256;i++)//用s2[i]暫時保留經過初始化的s[i],很重要的!!!{s2[i]=s[i];}printf(已經初始化,現在加密: );rc4_crypt(s,(unsignedchar*)pData,len);//加密printf(pData=%s ,pData);printf(已經加密,現在解密: );//rc4_init(s,(unsignedchar*)key,strlen(key));//初始化密鑰rc4_crypt(s2,(unsignedchar*)pData,len);//解密printf(pData=%s ,pData);return0;}//程序完

熱點內容
演算法製造 發布:2024-10-25 23:11:27 瀏覽:885
台式電腦安裝哪個安卓系統好 發布:2024-10-25 23:11:25 瀏覽:113
怎麼樣學電腦編程 發布:2024-10-25 23:10:13 瀏覽:523
安卓手機內存佔用太多如何清理 發布:2024-10-25 23:03:53 瀏覽:909
swift項目編譯 發布:2024-10-25 22:53:12 瀏覽:962
邁銳寶買哪個配置合算 發布:2024-10-25 22:28:59 瀏覽:993
押韻腳本生成器 發布:2024-10-25 22:26:50 瀏覽:368
找文檔上傳 發布:2024-10-25 22:22:29 瀏覽:875
hibernate使用二級緩存 發布:2024-10-25 22:14:00 瀏覽:359
手機版登陸布穀鳥伺服器地址 發布:2024-10-25 22:13:59 瀏覽:173