python-通过TCP套接字进行AES加密的文件传输;填充问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-通过TCP套接字进行AES加密的文件传输;填充问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2167字,纯文字阅读大概需要4分钟。
内容图文
![python-通过TCP套接字进行AES加密的文件传输;填充问题](/upload/InfoBanner/zyjiaocheng/677/83906924b0244e6193877faa7882f2ba.jpg)
我正在尝试使用带有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字节块进行编码.然后,在服务器上,您正在从网络读取1024个字节并尝试对其进行解码.但是,base64编码将增加原始数据的长度,因此您将仅读取编码形式的前1024个字节,这将是被截断的base64消息(因此未正确填充).
至于如何解决,base64消息需要全部解码为一条.因此,您要么需要计算要从网络读取多少数据即可获得完整的编码块(这种计算可以可靠地执行,但最后一个数据包可能很短,因为base64的长度始终为(length 2)/ 3 * 4 ),立即对整个数据流进行编码(如果要处理任意大小的文件,可能会由于使用内存而出现问题),或者定义您的网络协议,以便服务器可以判断出可以看到一个完整的块用base64解码.
内容总结
以上是互联网集市为您收集整理的python-通过TCP套接字进行AES加密的文件传输;填充问题全部内容,希望文章能够帮你解决python-通过TCP套接字进行AES加密的文件传输;填充问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。