问题描述
我在使用加密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 (将#修改为@)