首页 > 解决方案 > 在 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, '调用')

标签: pythonencryptioncryptographyrsapycrypto

解决方案


推荐阅读