python - 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())
解决方案
推荐阅读
- asp.net - asp.net core中web.config文件的替代品是什么
- android - 全屏缺口键盘调整大小问题
- c# - 想在 asp 中转换为 pdf 但出现错误 - RegisterForEventValidation 只能在 Render() 期间调用;
- performance - 使用 JMeter 进行 IMAP 邮件采样器负载测试以增加 fetchsize
- javafx - Create and bind DoubleProperty in user control with FXML
- java - 如何将实体对象绑定到本地 @Transient 属性?
- r - 使用 mutate 创建新列
- objective-c - 应用程序在 NSUserDefaults setObject:forKey 上崩溃:
- r - 根据 R 中的标准计算时间
- mysql - 如何在 MySQL alter 命令中添加 if 语句?