序列密碼之RC4

2021-09-05 19:59:53 字數 2378 閱讀 2903

rc4是乙個典型的基於非線性陣列變換的序列密碼。它以乙個足夠大的陣列s為基礎,對其進行非線性變換,產生非線性的金鑰流序列。

rc4演算法s盒的大小根據引數n的值而變化,通常n=8,這樣rc4可生成256個元素的陣列s

種子金鑰長度為1~ 256個位元組(8~2048位元)的可變長度,用於初始化256個位元組的初始向量s

rc4有兩個主要演算法:

具體過程如下:

# ksa 初始化s盒

definitsbox

(k):

# 初始化s盒 存初始值0-255

s =list

(range

(256))

t =# 用於輪轉存放key

for i in

range

(256):

ord(k[i %

len(k)])

)# 存放輪轉的256位key

j =0for i in

range

(256):

j =(j + s[i]

+ t[i])%

256# 通過交換,打亂s盒

s[i]

, s[j]

= s[j]

, s[i]

return s

# prga生成金鑰流

defencrypt

(m, k)

: c =

"" i = j =

0# 呼叫已經初始化的s盒

s = initsbox(k)

for x in

range

(len

(m))

: i =

(i +1)

%256

j =(j + s[i])%

256 s[i]

, s[j]

= s[j]

, s[i]

# 交換 打亂s盒

t =(s[i]

+ s[j])%

256# 將生成的金鑰流key逐一與明文進行異或,格式化成16進製制字串

c +=

'%02x'%(

ord(m[x]

)^ s[t]

)return c

if __name__ ==

"__main__"

:# 加密

m =k =

"qwertyuiop"

ans = encrypt(m, k)

print

("加密後得到的內容為: \n"

+ ans)

# 解密

c = ans #獲取密文

b ="" text =

""# 將16進製制字串轉換為相應字元,存入字串b中

for i in

range(0

,len

(c),2)

: b +=

str(

chr(

int(c[i : i +2]

,16))

)# 解密其實就是再次與金鑰流進行異或,再次呼叫encrypt函式

res = encrypt(b, k)

# 異或後的16進製制對應相應的明文本元,轉換為相應字元

for i in

range(0

,len

(res),2

):text +=

str(

chr(

int(res[i : i +2]

,16))

)print

("解密後得到的明文為: \n"

+ text)

加密與解密使用同乙個加密函式,因為解密其實就是再次與金鑰流進行異或。結果如下。

演算法主要包含金鑰排程演算法(ksa):用於打亂s盒的初始排列 和偽隨機數生成演算法(prga)用於輸出隨機序列並修改s的當前排列。前者的所有操作僅僅是改變位置。後者的秘鑰序列生成過程較為複雜(很好地打亂),但加解密使用的是同乙個秘鑰k,故隨機生成後的秘鑰序列依然是相同的,加上加解密只是簡單的異或運算,故演算法正確。

由演算法的實現可知,rc4演算法的加解密對種子秘鑰的依賴十分強烈。故需要保證種子秘鑰的安全性。對於此,可進行相關攻擊。

演算法存在無效的初始置換,j = (j + s[i] + t[i]) mod 256(j+t[i])mod 256 ≡ 0t[i]=[0,0,255,254,253,...,2]這樣的情況下,s盒完全不會被攪亂,都是無效替換。這樣便可以通過統計分析破解。

流密碼(序列密碼)與Rc4演算法

流密碼 序列密碼 與rc4演算法 rc4是一種序列密碼,它是一種可變金鑰長度 面向位元組操作的序列密碼,乙個明文位元組與乙個金鑰位元組相異或產生乙個密文位元組。演算法原理 對於n 8位長的字,即以乙個位元組為單位,此時n 256,用從1到256個位元組的可變長度金鑰初始化乙個256個位元組的狀態向量...

流密碼加密(RC4和LFSR)

演算法思想 1 先初始化狀態向量s 256個位元組,用來作為金鑰流生成的種子1 按照公升序,給每個位元組賦值0,1,2,3,4,5,6 254,255。2 初始金鑰 由使用者輸入 長度任意。如果輸入長度小於256個位元組,則進行輪轉,直到填滿。例如輸入金鑰的是1,2,3,4,5,那麼填入的是1,2,...

流密碼 python實現RC4加密

1 理解流密碼的基本思想 2 掌握rc4加密演算法的加解密過程和實現方法 3 採用自己熟悉的程式語言實現rc4密碼演算法。給定金鑰abcde,試對明文 shenzhen university 加密 注 明文包括空格,但不包括引號 rc4的python實現 defs box r s盒 s x for ...