RC4加密算法原理簡單理解


學了這么多加密算法,首先要了解的是:對明文使用同一個密鑰異或兩次最后是得到原文的

RC4加密算法其實也是比較簡單的,重點是在秘鑰流生成器那里,其實也是比較簡單的。

重點講解RC4秘鑰生成步驟

感覺這個流程圖畫的很不錯,拿過來作為大家參考一下(圖片轉載地址:https://www.cnblogs.com/block2016/p/5601925.html)

 

1、先初始化狀態向量S(256個字節,用來作為密鑰流生成的種子1)

按照升序,給每個字節賦值0,1,2,3,4,5,6.....,254,255

2、初始密鑰(由用戶輸入),長度任意

如果輸入長度小於256個字節,則進行輪轉,直到填滿

例如輸入密鑰的是1,2,3,4,5   ,  那么填入的是1,2,3,4,5,1,2,3,4,5,1,2,3,4,5........

由上述輪轉過程得到256個字節的向量T(用來作為密鑰流生成的種子2)

3、開始對狀態向量S進行置換操作(用來打亂初始種子1)

按照下列規則進行

從第零個字節開始,執行256次,保證每個字節都得到處理

 j = 0;

  for (i = 0 ; i < 256 ; i++){

    j = (j + S[i] + T[i]) mod 256;

    swap(S[i] , S[j]);

  }

這樣處理后的狀態向量S幾乎是帶有一定的隨機性了

4、最后是秘鑰流的生成與加密,很多人在這里不是特別理解,別的博客也沒有寫的很簡潔明了

假設我的明文字節數是datalength=1024個字節(當然可以是任意個字節)

i=0;

j=0;

while(datalength--){//相當於執行1024次,這樣生成的秘鑰流也是1024個字節

   i = (i + 1) mod 256;

    j = (j + S[i]) mod 256;

    swap(S[i] , S[j]);

    t = (S[i] + S[j]) mod 256;

    k = S[t];這里的K就是當前生成的一個秘鑰流中的一位

    //可以直接在這里進行加密,當然也可以將密鑰流保存在數組中,最后進行異或就ok

    data[]=data[]^k; //進行加密,"^"是異或運算符

}

解密按照前面寫的,異或兩次就是原文,所以只要把密鑰流重新拿過來異或一次就能得到原文了

這樣就完成了一次生成密鑰流及加密的過程,這也是RC4的全部工作,是不是很簡單呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM