首页 > 解决方案 > Python关于IO二进制文件中ASCII码0x1a的问题

问题描述

我在加密 PNG 图像文件时遇到了一个问题。我试图通过 AES 加密文件。但是当我用类似生成器的方法解密它时,它不起作用。我认为它应该有太多的 EOF(十六进制的 0x1A)。这是我的结果:我的结果图片是我的代码:

import sys
from io import BytesIO
import cStringIO
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex



class prpcrypt():
    def __init__(self, key):
        self.key = key
        self.mode = AES.MODE_CFB


    def encrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.key)
        length = 16
        count = len(text)
        if(count % length != 0):
            add = length - (count % length)
        else:
        add = 0
        text = text + ('\0' * add)
        self.ciphertext = cryptor.encrypt(text)
        return self.ciphertext

    def decrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.key)
        plain_text = cryptor.decrypt(text)
        return plain_text.rstrip('\0')

if __name__ == '__main__':
    with open('nb.png', 'r+') as f:
        fd = cStringIO.StringIO(f.read())
    fd.seek(0)
    pc = prpcrypt('keyskeyskeyskeys')      
    e = pc.encrypt(fd.read())
    fd = cStringIO.StringIO(e)
    fp = cStringIO.StringIO()
    cnt = 1
    while True:
        data = fd.read(524288)
        if not data:
            break
        cnt += 1
        data = pc.decrypt(data)
        fp.write(data)
    print cnt
    fp.seek(0)

    with open('ret.png', 'wb+') as r:
        r.write(fp.getvalue())

标签: pythonascii

解决方案


推荐阅读