**流密碼加密
1、RC4**
演算法思想:
(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就是當前生成的一個秘鑰流中的一位
//可以直接在這里進行加密,當然也可以將密鑰流保存在陣列中,最后進行異或
data[]=data[]^k; //進行加密,"^"是異或運算子
}
重要部分代碼實作:
(1) 對狀態向量S進行置換操作(用來打亂初始種子1)

(2) 秘鑰流的生成與加密

2、“LFSR+J-K觸發器”
演算法思想:
(1) 首先我們定義兩個線性反饋移位暫存器(LFSR),并對初始狀態進行初始化,將LFSR的特征多項式作為密鑰由用戶輸入(我們設定為8位密鑰),得到密鑰我們就能根據以下線性反饋移位暫存器(LFSR)的原理,生成兩個序列,這個LFSR可以產生的最大序列長度為2^m-1,

(2) 將兩個序列分別作為JK觸發器的輸入端J、K,并且根據JK觸發器的結構及邏輯真值表,可以得到255位的密鑰流,

(3) 輸入明文時,先將明文轉換為二進制字串,進行加密后,再轉化為字串,
重要部分代碼實作:
1、 將字串轉化為二進制字串

2、 將二進制字串轉化為字串

3、獲取兩個線性反饋移位暫存器(LFSR),將兩個序列分別作為JK觸發器的輸入端J、K,可以得到255位的密鑰流,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/244229.html
標籤:其他
