導航:首頁 > 源碼編譯 > 序列密碼和rc4演算法的整個過程

序列密碼和rc4演算法的整個過程

發布時間:2022-07-09 11:34:50

『壹』 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;}//程序完

『貳』 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演算法並不像人們原先認為的那樣安全。這一發現可能促使人們重新設計無線通信網路,並且使用新的加密演算法。

『叄』 請問誰能給我一個RC4演算法的完整程序嗎,我在用KEIL C編程時遇到問題了,希望能夠參考一下

我剛看了網路的RC4演算法 寫的太粗了 但是也差不多 可以看
樓主一分也不給 分不是問題 5分意思意思也就可以了 問題是你太吝嗇了
所以我也就不去給你抄書上的代碼了

大致可以告訴你 去圖書館找本 應用密碼學吧 rc4是流密碼的代表 是本書都有
而且rc4很簡單

RC4用的就是一個s-box 也就是是一個數組 不斷調整狀態 也就是改變這個數組
然後用這個數組得到密鑰流 密鑰流異或文明就是密文 密文再異或一次就是明文了

Rc4的代碼已經是簡單的不能再簡單了 就2部分 一個調整狀態 一個得出密鑰流
沒了 我實在不理解你還有什麼問題

『肆』 RC4的RC4加密演算法

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

『伍』 C語言程序糾錯,RC4序列密碼~~~

主函數的char key沒有加指針,應該為char *key;就可以運行了

『陸』 求RC4演算法的原理,最好用通俗的語言講解,能打下比方更好了(本人能看懂一點VB跟C)

RC4經典加密演算法VB版本代碼

VB版rc4演算法

Public Sub main()
Dim key As String
For i = 1 To 16
Randomize
key = key & Chr(Rnd * 255)
Next i
MsgBox RC4(RC4("Welcome To Plindge Studio!", key), key)
End Sub
Public Function RC4(inp As String, key As String) As String
Dim S(0 To 255) As Byte, K(0 To 255) As Byte, i As Long
Dim j As Long, temp As Byte, Y As Byte, t As Long, x As Long
Dim Outp As String

For i = 0 To 255
S(i) = i
Next

j = 1
For i = 0 To 255
If j > Len(key) Then j = 1
K(i) = Asc(Mid(key, j, 1))
j = j + 1
Next i

j = 0
For i = 0 To 255
j = (j + S(i) + K(i)) Mod 256
temp = S(i)
S(i) = S(j)
S(j) = temp
Next i

i = 0
j = 0
For x = 1 To Len(inp)
i = (i + 1) Mod 256
j = (j + S(i)) Mod 256
temp = S(i)
S(i) = S(j)
S(j) = temp
t = (S(i) + (S(j) Mod 256)) Mod 256
Y = S(t)

Outp = Outp & Chr(Asc(Mid(inp, x, 1)) Xor Y)
Next
RC4 = Outp
End Function

『柒』 RC4 與信息安全問題

一樓說的不正確

RC4 1976年就出現了。不早了吧。。RC6都參加過AES的篩選你說怎麼回事

RC4-應用很廣泛。。SSL(包含),WEP等都是採用RC4演算法

以色列的那幫XX說的是RC4的加密演算法和密鑰系統有缺陷。
當密鑰小於128位的時候--這里說的是bit..也就是16位元組
強度不高很容易總結出規律。

原因是多方面的最關鍵的還是。密鑰系統過於簡單。復雜的話那速度不就慢了嘛。還有加密解密演算法過於簡單。。他是XOR演算法。在XOR一遍就是解密

密碼學家也說了。密鑰高於128還是比較安全的。
當然RC4演算法最高支持256位元組也就是2048位密鑰
最好採用復雜的密鑰生成器。。。
一般情況下..是輸入一段XX-然後Md5-HASH用HASH當做密鑰...
比如y0da protecter就是採用此類方法來加密的

關於安全性問題就出現在windows上了。windows下WIFI密鑰通常只能輸入13位元組。遠達不到16位元組的。安全性。
所以會產生重復和碰撞。--因為用了xor。所以出來混的總要還的。。:P

改進方法3種:
1.不需要改演算法。盡量的使用長密鑰
2.加強加密運算,比如原來是xor,你可以加點add拉,shr,shl,sub
雖然大作用起不到.但是在別人不知道你改進演算法的情況下還是可以起到一定作用的
3.改進密鑰系統...說實話.這個不太熟悉.因為加密演算法的問題所以這里不是很好改...

一般來說使用長密鑰在還是有一定的安全性的...
如果實在沒招的話可以採用其他演算法ECC雖然不錯但是也有漏洞可以攻破
推薦看<<經典密碼學與現代密碼學>>
從古典演算法到現在使用的演算法。。包括原理很攻破

『捌』 rc4演算法該怎樣寫一個完整的程序代碼用的是c/c++都行。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef unsigned long ULONG;
void rc4_init(unsigned char *s, unsigned char *data,unsigned Len) { //初始化函數
int i,j;
unsigned char k[256] = {0},tmp;
for(i = 0;i < 256;i++) {
s[i] = i;
k[i] = data[i%Len];
}
for(i = 0; i < 256; i++) {
j = (j + s[i] + k[i])%Len;
tmp = s[i];
s[i] = s[j]; //交換s[i]和s[j]
s[j] = tmp;
}
}

void rc4_crypt(unsigned char *s, unsigned char *Data, unsigned long Len) { //加解密
int i = 0, j = 0, t = 0;
unsigned long k = 0;
unsigned char tmp;
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];
}
}

int main() {
unsigned char s[256] = {0},st[256] = {0}; //S-box
char key[256] = "just for test";
char pData[512] = "待加密數據Data";
ULONG len = strlen(pData);
printf("pData = %s\n",pData);
printf("key = %s, length = %d\n\n",key,strlen(key));
rc4_init(s,(unsigned char *)key,strlen(key)); //初始化
printf("完成對S[i]的初始化,如下:\n\n");
for(int i = 0; i < 256; i++) {
printf("%-3d ",s[i]);
}
printf("\n\n");
for(i = 0; i < 256;i++) { //用st[i]暫時保留經過初始化的s[i],很重要的!!!
st[i] = s[i];
}
printf("已經初始化,現在加密:\n\n");
rc4_crypt(s,(unsigned char *)pData,len);//加密
printf("pData = %s\n\n",pData);
printf("已經加密,現在解密:\n\n");
rc4_init(s,(unsigned char *)key,strlen(key)); //初始化密鑰
rc4_crypt(st,(unsigned char *)pData,len);//解密
printf("pData = %s\n\n",pData);
return 0;
}

『玖』 對稱加密演算法的加密演算法

基於「對稱密鑰」的加密演算法主要有DES、TripleDES、RC2、RC4、RC5和Blowfish等。
對稱密鑰:DES TripleDES演算法
DES演算法把64位的明文輸入塊變為數據長度為64位的密文輸出塊,其中8位為奇偶校驗位,另外56位作為密碼的長度。首先,DES把輸入的64位數據塊按位重新組合,並把輸出分為L0、R0兩部分,每部分各長32位,並進行前後置換,最終由L0輸出左32位,R0輸出右32位,根據這個法則經過16次迭代運算後,得到L16、R16,將此作為輸入,進行與初始置換相反的逆置換,即得到密文輸出。
DES演算法具有極高的安全性,到目前為止,除了用窮舉搜索法對DES演算法進行攻擊外,還沒有發現更有效的辦法,而56位長密鑰的窮舉空間為2^56,這意味著如果一台計算機的速度是每秒種檢測100萬個密鑰,那麼它搜索完全部密鑰就需要將近2285年的時間,因此DES演算法是一種很可靠的加密方法。
對稱密鑰:RC演算法
RC4演算法的原理是「攪亂」,它包括初始化演算法和偽隨機子密碼生成演算法兩大部分,在初始化的過程中,密鑰的主要功能是將一個256位元組的初始數簇進行隨機攪亂,不同的數簇在經過偽隨機子密碼生成演算法的處理後可以得到不同的子密鑰序列,將得到的子密鑰序列和明文進行異或運算(XOR)後,得到密文。
由於RC4演算法加密採用的是異或方式,所以,一旦子密鑰序列出現了重復,密文就有可能被破解,但是目前還沒有發現密鑰長度達到128位的RC4有重復的可能性,所以,RC4也是目前最安全的加密演算法之一。
對稱密鑰:BlowFish演算法
BlowFish演算法是一個64位分組及可變密鑰長度的分組密碼演算法,該演算法是非專利的。
BlowFish演算法使用兩個「盒」:pbox[18]和sbox[4256],BlowFish演算法有一個核心加密函數。該函數輸入64位信息,運算後以64位密文的形式輸出。用BlowFish演算法加密信息,需要密鑰預處理和信息加密兩個過程。BlowFish演算法的原密鑰pbox和sbox是固定的,要加密一個信息,需要選擇一個key,用這個key對pbox和sbox進行變換,得到下一步信息加密所用到的key_pbox和key_sbox。
BlowFish演算法解密,同樣也需要密鑰預處理和信息解密兩個過程。密鑰預處理的過程和加密時完全相同。信息解密的過程就是把信息加密過程的key_pbox逆序使用即可。

閱讀全文

與序列密碼和rc4演算法的整個過程相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:579
python員工信息登記表 瀏覽:377
高中美術pdf 瀏覽:161
java實現排列 瀏覽:513
javavector的用法 瀏覽:982
osi實現加密的三層 瀏覽:233
大眾寶來原廠中控如何安裝app 瀏覽:916
linux內核根文件系統 瀏覽:243
3d的命令面板不見了 瀏覽:526
武漢理工大學伺服器ip地址 瀏覽:149
亞馬遜雲伺服器登錄 瀏覽:525
安卓手機如何進行文件處理 瀏覽:71
mysql執行系統命令 瀏覽:930
php支持curlhttps 瀏覽:143
新預演算法責任 瀏覽:444
伺服器如何處理5萬人同時在線 瀏覽:251
哈夫曼編碼數據壓縮 瀏覽:426
鎖定伺服器是什麼意思 瀏覽:385
場景檢測演算法 瀏覽:617
解壓手機軟體觸屏 瀏覽:350