python脚本报错
在网上扒了一个ctf的rc4的解题脚本,但是在第二次测试的时候出现了这个报错
'utf-8' codec can't decode byte 0xa1 in position 1: invalid start byte
from Crypto.Cipher import ARC4
key = b'SIFLAG'
a = [71,207,34,90,14,211,39,48,229,11,107,71,120,92,57,155,165,56,222,5,159,136,254,16,119,28,1,7]
enc = b''.join([bytes([i]) for i in a])
rc4 = ARC4.new(key)
decrypted_data = rc4.decrypt(enc)
print(decrypted_data.decode('utf-8'))
这是没有报错的代码(两次区别在于只更改了key和密文)
from Crypto.Cipher import ARC4
key = b'moectf2023'
a = [27,155,251,25,6,106,181,59,124,186,3,243,145,184,182,61,138,193,72,46,80,17,231,199,79,177,39,207,243,174,3,9,178,8,251,220,34,0]
enc = b''.join([bytes([i]) for i in a])
rc4 = ARC4.new(key)
decrypted_data = rc4.decrypt(enc)
print(decrypted_data.decode('utf-8'))
【相关推荐】
def get_text():
text=input('输入明文:')
return text
def get_key():
key=''
active=True
while active:
key=input('输入密钥:')
if key == '':
print('密钥不能为空,请重新输入!')
else:
active=False
return key
def init(key):
s=list(range(256))
j=0
for i in range(256):
j=(j+s[i]+ord(key[i%len(key)]))%256
s[i],s[j] =s[j],s[i]
print('s初始置换数组为:')
print(s)
return s
def trans_stream(message,s_box):
result=[]
i=j=0
for s in message:
i=(i+1)%256
j=(j+s_box[i])%256
s_box[i],s_box[j]=s_box[j],s_box[i]
t=(s_box[i]+s_box[j])%256
k=s_box[t]
result.append(chr(ord(s)^k))
print('密文为:')
print(''.join(result))
def start():
print('欢迎使用RC4加密!')
text=get_text()
key=get_key()
print('明文为:'+text)
print('密钥为:'+key)
s=init(key)
trans_stream(text,s)
temp=input('回车结束程序。')
start()