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個位...