RC4解密脚本报错,出现第一次未出现的问题

python脚本报错
在网上扒了一个ctf的rc4的解题脚本,但是在第二次测试的时候出现了这个报错
'utf-8' codec can't decode byte 0xa1 in position 1: invalid start byte

img


第一次调试的时候使用的那道题目则没有这个报错,希望得到解答
这个是报错的代码

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'))


@CSDN-Ada助手

【相关推荐】



  • 这篇博客: CTF常规密码学加解密脚本(python)中的 三、RC4加解密(python3) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    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()
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^