gpt4 book ai didi

python - 通过 TCP 套接字进行 AES 加密文件传输;填充问题

转载 作者:可可西里 更新时间:2023-11-01 02:33:48 26 4
gpt4 key购买 nike

我正在尝试使用 AES 256 的加密 TCP 套接字进行文件传输。

  • 如果我传输一个没有加密的文件,它可以正常工作。
  • 如果我向客户端或服务器发送小命令(例如“ipconfig”),加密工作正常。
  • 无论文件大小如何,我都会不断收到以下错误消息:

    DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
    File "/usr/lib/python2.6/base64.py", line 76, in b64decode
    raise TypeError(msg)
    TypeError: Incorrect padding

我的编码和解码函数如下(hat 变量是消息):

def AESENC(hat,typ):

BLOCK_SIZE = 32
PADDING = '{'
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)

secret = '01234567890123456789012345678912'
IV = 'wir&/>H54mgd9a";'

cipher = AES.new(secret,AES.MODE_CFB,IV)

if typ == 0:
encoded = EncodeAES(cipher, hat)
return encoded
else:
decoded = DecodeAES(cipher, hat)
return decoded

客户端

if os.path.exists(df):
print ' found the file '
f = open(df, 'rb')
packet = f.read(1024)
while packet != '':
s.send(AESENC(packet,0))
s.send( AESENC('123XXX',0) )
s.send('123XXX')
f.close()

服务器端

f = open('/root/Desktop/Transfer.mp3','wb')
while True:
bits = AESENC ( conn.recv(1024) , 1 )
while (bits):
f.write(bits)
bits = AESENC ( conn.recv(1024) , 1 )
if bits.endswith('123XXX'):
print '[+] Transfer completed '
break

f.close()
break
return

有人知道如何解决这个问题吗?

最佳答案

对于您的示例代码的误解表示歉意,并感谢您添加服务器和客户端调用!

请注意,您收到的错误消息与加密无关。可以阅读base64.py库的相关部分:报错提示base64数据不合法。特别是,它最后没有正确填充。

有了额外的调用站点信息,我认为问题在于您正在加密然后单独编码客户端上的每个 1024 字节数据 block 。然后,在服务器上,您从网络读取 1024 字节并尝试对其进行解码。但是,base64 编码会增加原始数据的长度,因此您将读取的只是编码形式的前 1024 个字节,这将是截断的 base64 消息(因此填充不当)。

至于如何解决,一个base64报文需要全部解码。因此,您要么需要计算从网络读取多少数据以获得完整的编码 block (除了可能较短的最后一个数据包外,您可以可靠地进行计算,因为 base64 长度始终为 (length + 2)/3 * 4), 一次编码整个数据流(如果你想处理任意大小的文件,这可能是由于内存使用的问题),或者定义你的网络协议(protocol),以便服务器可以告诉它看到了一个完整的 block ,可以用base64解码。

关于python - 通过 TCP 套接字进行 AES 加密文件传输;填充问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15731267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com