Python加密模块public_key verify方法

问题描述

我在使用加密2.9.2的python 3.8.5。我需要从公共密钥验证数字签名,但是我对密码学中的填充类感到非常困惑。

公钥和签名通过XML文件发送给我。使用LXML,我将该文件加载到变量inxml中,并使用此代码获取那些项。该代码有效。

&

这给了我

  • 作为字符串的消息
  • 用户密钥为public_key
  • 用户签名为字节。

下一行代码给我一个错误:

message = inxml.findall('//message).text #The message that was signed.
user-key = inxml.findall('//pubkey')[0].text #The text file ---BEGIN PUBLIC KEY--- and so on.
c=bytes(user0key.encode()) #Convert the string to a bytes object.
user-key = serialization.load_pem_public_key(c,backend=default_backend()) #Use the py-cryptography method to make a public-key object.
user-sig = inxml.findall('//signature')[0].text #Get the base64-encoded signature.
user-sig = base64.b64decode(user-sig) #Decode the signature back to binary. 

我得到的错误是:

user-key.verify(user-sig,message,padding.PKCS7(128),hashes.SHA512)

制作XML文件的人使用以下命令创建了签名(在Powershell中): ./openssl.exe dgst -sha512 -sign $ private-key -passin pass:$ password -out sig.sig $ message ./openssl.exe base64 -in sig.sig -out $ base64

然后将$ base64变量放入XML文件。

我不明白为什么使用hash.SHA512应该会导致错误。我真的完全不了解padding的论点。有人可以指出我正确的方向吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)