流密碼 python實現RC4加密

2021-10-25 10:36:21 字數 2323 閱讀 2645

1、 理解流密碼的基本思想

2、 掌握rc4加密演算法的加解密過程和實現方法

3、 採用自己熟悉的程式語言實現rc4密碼演算法。給定金鑰abcde,試對明文「shenzhen university」加密(注:明文包括空格,但不包括引號)。

# rc4的python實現

defs_box

(r):

# s盒

s =[x for x in

range

(256)]

j =0#s盒打亂順序

for i in

range

(256):

j =(j + s[i]

+ k[i])%

256 s[i]

, s[j]

= s[j]

, s[i]

return s

defgen_k

(key)

:#將字串轉換為ascii碼

temp =

list

(bytes

(key, encoding=

'utf-8'))

#print('金鑰的ascii碼:', temp)

len_key =

len(temp)

#填充金鑰

k =[temp[i % len_key]

for i in

range

(256)]

return k

#根據密文長度生成金鑰流

defkey_box

(s, length)

: j =

0 keys =

length =

int(length)

for i in

range

(length)

: i =

(i +1)

%256

j =(j + s[i])%

256 s[i]

, s[j]

= s[j]

, s[i]

t =(s[j]

+ s[i])%

256 k = s[t]

return keys

while(1

):choose =

input

('加密輸入1,解密輸入2,退出輸入3:'

)if choose ==

'1':

key =

input

('請輸入金鑰:'

) k = gen_k(key)

s = s_box(k)

# print('s:',s)

message =

input

('輸入明文:'

) secret =

'' keys = key_box(s,

len(message)

)print

("十進位制金鑰流:"

,keys)

for i in

range

(len

(message)):

secret = secret +

'%02x'

%(keys[i]

^ord

(message[i]))

print

('加密後十六進製制密文為:'

, secret)

if choose ==

'2':

key =

input

('請輸入金鑰:'

) k = gen_k(key)

s = s_box(k)

# print('s:',s)

secret =

input

('請輸入密文:'

) message =

'' keys = key_box(s,

len(secret)/2

)for i in

range

(int

(len

(secret)/2

)): message = message +

chr(

int(secret[0:

2],16

)^ keys[i]

) secret = secret[2:

]print

('解密後明文為:'

, message)

if choose ==

'3':

break

流密碼(序列密碼)與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,...

序列密碼之RC4

rc4是乙個典型的基於非線性陣列變換的序列密碼。它以乙個足夠大的陣列s為基礎,對其進行非線性變換,產生非線性的金鑰流序列。rc4演算法s盒的大小根據引數n的值而變化,通常n 8,這樣rc4可生成256個元素的陣列s 種子金鑰長度為1 256個位元組 8 2048位元 的可變長度,用於初始化256個位...