Python 2.7,Pycryptodome:由于编码问题,无法在服务器端验证私钥签名

问题描述 投票:1回答:1

我正在使用客户端上的Python Requests模块功能和服务器端上的Flask服务器在两个节点之间以Json格式发送数据。我需要使用RSA私钥对Python 2.7字符串“某些字符串”进行数字签名,并在服务器端验证签名。为此,我选择了Pycryptodome模块。不幸的是,[来自Json Python模块的json.dumps()要求将字符串的签名哈希从Pycryptodome的'pss'签名函数输出的格式(字节字符串)转换为unicode字符串-json需要unicode: How to encode bytes in JSON? json.dumps() throwing a TypeError

我正在使用base 64模块的base64.b64encode()函数将数字签名转换为json.dumps()可以处理的形式-将签名与jsonoficatoin之前的其他内容一起放入python字典中-然后希望使用base64.b64decode在服务器端进行解码,以期找回可由Pycryptodome的verify()函数处理的字节字符串。

# client
hash = SHA256.new(some_string)
sig = pss.new(PrivKey).sign(hash)
finicky_Json = base64.b64encode(sig)

...

# server
hash = SHA256.new(some_string)
back_to_normal_sig = base64.b64decode(finicky_Json)
public_key_object = pss.new(PubKey)
public_key_object.verify(hash, back_to_normal_sig)`

不幸的是,我遇到类型错误:

raise TypeError("Object type %s cannot be passed to C code" % type(data)) TypeError: Object type <type 'unicode'> cannot be passed to C code 我想念什么?谢谢

json python-2.7 character-encoding digital-signature pycryptodome
1个回答
0
投票

如果要传递的内容是ASCII(应该是ASCII,则可以使用str()包装Unicode字符串。

© www.soinside.com 2019 - 2024. All rights reserved.