python - 在 PyCrypto 中验证 RSA 签名 - 输入格式
问题描述
我正在尝试使用 PyCrypto 来验证某些消息的 RSA 签名。我遇到了运行时错误。我怀疑这与输入的签名和/或公钥的格式有关。
示例代码
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA512, SHA384, SHA256, SHA, MD5
from Crypto import Random
from base64 import b64encode, b64decode
hash = "SHA-256"
def verify(message, signature, pub_key):
signer = PKCS1_v1_5.new(pub_key)
if (hash == "SHA-512"):
digest = SHA512.new()
elif (hash == "SHA-384"):
digest = SHA384.new()
elif (hash == "SHA-256"):
digest = SHA256.new()
elif (hash == "SHA-1"):
digest = SHA.new()
else:
digest = MD5.new()
digest.update(message)
return signer.verify(digest, signature)
verify = rsa.verify(content, b64decode(signature), RSA.importKey(b64decode(publicKey)))
示例输入
content = "FID:XXX;feed:Funny;date:2021-02-01 12:24:26;UID:Ab27aNxbtkgmEd2nGGxsEpcYPO33;ratio:0.28465346534653463;title:Yawns are contagious;username:Jane;type:Image;url:https://i.imgur.com/vQA4D3o.gif;thumbnail:https://thumbor.forbes.com/thumbor/fit-in/416x416/filters%3Aformat%28jpg%29/https%3A%2F%2Fspecials-images.forbesimg.com%2Fimageserve%2F5f4977a36096df14bbef84d4%2F0x0.jpg%3Fbackground%3D000000%26cropX1%3D781%26cropX2%3D1650%26cropY1%3D314%26cropY2%3D1183;"
signature = "nH9ZeDqXCPFXYx8KQpBLR84SWw51FOz0bCEo7JBZAi+aKVOI7w9T+gJvSBX3oAioGiMTlqIorVjnIMcqdkcKQoDa1iNfIo9G2uVwMRAX8iCZMJKw9jBqboAn8uy8ia/wQwao9df5VZl1wxcOOlBuUnp5cvl90m510iol2T+JxFytn6bojscviSnAatconHXA3HrNy1kLk5zsGarGT9FasUu48YaEtp/ygxejhXiEeQn8fPx3mNtIQPe2IewH9zwC4yfGCwRaAf64Lp6VPktvT+ykM58dqvwxJU2GtD6GSD8Gj0wMP0TFqSZCotHCB7JWxGItY6vJU8tAbGOZRVOlGg=="
publicKey = "MIIBCgKCAQEAqgQkzNhzFmMoYzhtVF7eDPL/uc/i6hMv/0XhcM3A+Jwc+cBAnLMGcdkkUQC8EX9LJoi7CHJsTq5OfegJjhJH5W3UCBRwJZ9k5mP1wjtw00go7wLiH8beoD99ml2DgJMyLITfzgJxk6RJ+kyCB6sBnzTjVCTQFZg0JoEpsG0mqFuAepzHFUhMjEqfvxC3mzs7aUl5iDp2+QDrTVRWjlrYAO2GTYgig36i+tpH8/MD4MYEM4bgMIDp0RK/C5FXd+2XaKYDVqZoMNzrNwS7X24nFo+saodUsd++vQzqlvo0XfQBHRm7gIH+oHlG16y/uWsS9IZ/o6Qty5DOCISG8uAsJwIDAQAB"
错误
文件“/workspace/main.py”,第 52 行,添加 verifySignature(postID,uid,signature) 文件“/workspace/main.py”,第 28 行,verifySignature verify = rsa.verify(content, b64decode(signature) , RSA.importKey(b64decode(publicKey))) 文件“/layers/google.python.pip/pip/lib/python3.8/site-packages/rsa/pkcs1.py”,第 356 行,验证 message_hash = compute_hash( message, method_name) 文件“/layers/google.python.pip/pip/lib/python3.8/site-packages/rsa/pkcs1.py”,第 432 行,compute_hash 断言 hasattr(message, 'read') 和 hasattr (message.read, '调用')
解决方案
推荐阅读
- python - 有没有办法从网站下载文件并将其直接上传到 Google Drive?
- arrays - Postgresql 数组总和
- python - 如何使用步幅从单个图像创建多个图像?
- c++ - 我怎样才能尽可能快地做到这一点?- 遍历图像垫
- linux - 在 ubuntu 上更改 PIL 中的 Image.core.jpeglib 版本
- java - 为什么在 Android Studio 中不会逐行执行?
- css - 有没有办法动态改变 ng-cicle-progress CircleProgressComponent 元素的大小?
- c - 结构指针及其指针属性问题
- cluster-analysis - 雪花中的 Automatic_Clustering_History 信息
- javascript - ObjectId 未在 MongoDB 上更新 - Node.Js