第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

RSA 簽名數(shù)據(jù)驗(yàn)證不起作用 PyCryptodome

RSA 簽名數(shù)據(jù)驗(yàn)證不起作用 PyCryptodome

qq_遁去的一_1 2023-07-05 15:27:55
很抱歉這個(gè)非常具體的問(wèn)題,但我真的要瘋了。我正在嘗試制作一個(gè)模塊,以便在需要簽名或驗(yàn)證簽名時(shí)簡(jiǎn)單地導(dǎo)入,但遇到了問(wèn)題,無(wú)論我輸入簽名數(shù)據(jù)還是其他任何內(nèi)容,驗(yàn)證器都會(huì)返回 true,代碼如下:RSA_Handler.pyfrom Crypto.PublicKey import RSAfrom Crypto.Hash import SHA256from Crypto.Signature import PKCS1_v1_5import pickledef sign(data, exported_key):    key = RSA.importKey(exported_key)    signed_data = []    signed_data.append(data)    signed_data.append(PKCS1_v1_5.new(key).sign(SHA256.new(pickle.dumps(data))))    return signed_datadef verify(signed_data, exported_key):    data = signed_data[0]    signature = signed_data[1]    key = RSA.importKey(exported_key)    h = SHA256.new(pickle.dumps(data))    try:        PKCS1_v1_5.new(key).verify(h, signature)        return True    except(ValueError, TypeError):        return Falsetest01.pyfrom RSA_Handler import *import pickleimport oswith open("keys.txt", "rb") as rb:    keys = rb.read()signed = sign("hello", keys)trueorfalse = verify(["this will return"," true whatever I enter"], keys)print(trueorfalse)
查看完整描述

2 回答

?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊

我可以重現(xiàn)該問(wèn)題(至少對(duì)于最新版本的 PyCryptodome,即 3.9.8)。似乎行為取決于填充類型。對(duì)于當(dāng)前在發(fā)布的代碼中使用的 module ,如果簽名無(wú)效,PKCS1_v1_5驗(yàn)證不會(huì)引發(fā) a ,而是將結(jié)果作為返回值返回。ValueError


這意味著您的verify()函數(shù)始終返回True,因?yàn)榧词乖诤灻黄ヅ涞那闆r下,也不會(huì)ValueError引發(fā) a 或計(jì)算返回值。


要解決該問(wèn)題,您的verify()函數(shù)必須進(jìn)行如下更改:


def verify(signed_data, exported_key):

    data = signed_data[0]

    signature = signed_data[1]

    key = RSA.importKey(exported_key)

    h = SHA256.new(pickle.dumps(data))

    return PKCS1_v1_5.new(key).verify(h, signature)

可以用以下方法進(jìn)行測(cè)試:


# Signing

key = RSA.generate(1024)

keyPriv = key.exportKey()

signed = sign(b'Some data', keyPriv)


# Verifying

#signed[0] = b'Some data'             # Succeeds

signed[0] = b'Some other data'        # Fails

keyPub = key.publickey().exportKey()

verified = verify(signed, keyPub)

print(verified)

對(duì)于 PSS 填充,即對(duì)于模塊,在簽名無(wú)效的情況下將引發(fā)pssa 。ValueError即,如果您通過(guò)替換切換到此填充


from Crypto.Signature import PKCS1_v1_5


from Crypto.Signature import pss 

并且PKCS1_v1_5在pss其余代碼中,verify()函數(shù)中的邏輯可以保持不變。


編輯:


正如SquareRootOfTwentyThree 的答案PKCS1_v1_5中所解釋的那樣,它是一個(gè)過(guò)時(shí)的模塊pkcs1_15,必須使用該模塊,根據(jù)此處的ValueError文檔,該模塊按預(yù)期會(huì)在簽名無(wú)效的情況下生成。


查看完整回答
反對(duì) 回復(fù) 2023-07-05
?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

您正在導(dǎo)入過(guò)時(shí)的模塊PKCS1_v1_5,該模塊實(shí)際上并未記錄在 PyCryptodome 中。在您的代碼中,您必須改為:

from?Crypto.Signature?import?import?pkcs1_15

您正在使用的舊模塊(即PKCS1_v1_5)純粹是為了與 PyCrypto 向后兼容,它的行為方式與您觀察到的相同(即沒(méi)有例外 - 這不是那么好,新模塊更好)。


查看完整回答
反對(duì) 回復(fù) 2023-07-05
  • 2 回答
  • 0 關(guān)注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)