首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cryptography.fernet.InvalidToken

cryptography.fernet.InvalidToken
EN

Stack Overflow用户
提问于 2022-03-10 07:49:33
回答 1查看 308关注 0票数 0

因此,我有一个程序,应该通过TCP套接字连接两台机器。我正在尝试用RSA密钥来实现加密,使用“密码学”库。但是,一旦我运行了代码,我就会得到cryptography.fernet.InvalidToken错误。下面是我的代码,有人能给我解释一下为什么会出现这个错误吗?如何解决呢?

我的代码:(客户)

代码语言:javascript
复制
import socket
SERVER = "127.0.0.1"
PORT = 2022
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((SERVER, PORT))
client.sendall(bytes("This is from Client",'UTF-8'))

#===[Now, the encryption part]===#

key_file = open("key.key","rb")
key = key_file.read()
f = Fernet(key)

count = 0
while True:
    if count > 0:
        out_data = str(input("|>"))
        tokenOut = f.encrypt(bytes(out_data,'utf-8'))
        print(tokenOut)
        client.sendall(bytes(str(tokenOut),'utf-8'))
        if out_data=='bye':
            break
  
    in_data = bytes(str(client.recv(1024)),'utf-8')
#    print(f"[{count}>   ",in_data,"    <]")
    
    tokenIn = f.decrypt(in_data)
    print("From Server :" ,tokenIn)
    count += 1
client.close()
EN

回答 1

Stack Overflow用户

发布于 2022-08-05 08:19:46

我还没有测试您的代码,但我的第一个问题是您发送了哪些数据?如果它超过1024,这将导致它被拆分成多个消息,这将使您的令牌无效,原因是这里的行:

代码语言:javascript
复制
in_data = bytes(str(client.recv(1024)),'utf-8')

如果您有大量数据,可以尝试增加这个值,例如:

代码语言:javascript
复制
in_data = bytes(str(client.recv(4096)),'utf-8')

附带说明:您使用的是使用AES的Fernet。

AES对称加密和RSA是非对称加密-更多信息在这里:对称加密)

告诉我们你怎么样了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71420480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档