我試圖想出一個使用openssl的單線解決方案,它將填充消息的填充SHA256摘要(此字節爲256字節情況下,對於RSA2048),並應用RSA「解密」的256字節消化,即一種使用命令行對填充SHA256哈希進行RSA「加密」的方法openssl
m^d mod n
其中n是模數,d是私人指數和m是該摘要信息(填充)。這是通常在正常RSA2048身份驗證中發生的事情,但我需要零零碎碎地做。
我試過這個,它沒有工作。
openssl rsautl -decrypt -in msg.sha256 -inkey secret.pem -out msg.sha256.sig
RSA operation error
2675740:error:04065084:rsa routines:RSA_EAY_PRIVATE_DECRYPT:data too large for
modulus:rsa_eay.c:532:
在我混亂的加密和解密的希望(因爲我想用在計算私人指數)我想這對RSA「加密/解密」太
openssl rsautl -encrypt -in msg.sha256 -inkey secret.pem -out msg.sha256.sig
RSA operation error
2675740:error:0406D06E:rsa routines:RSA_padding_add_PKCS1_type_2:data too large
for key size:rsa_pk1.c:151:
讀了起來,在這種情況下,我認爲我將文件加密/解密與單個消息加密/解密相混淆。文件加密顯然是涉及AES128等的更高級別的協議。我不想那麼做,我只想用私人指數進行模冪運算。
我也試過pkeyutil
(據我所知是具有相同結果的首選方法)。我很確定我要走錯了路,也許這在命令行中是不可能的(我知道它可以從C API使用「bignum」實現)。
--- update ----
我試着從SHA256哈希中刪除PKCS1 v1.5填充(所以我剩下的只是32個字節的哈希),並通過它傳遞,但也沒有工作。
$ head -32c msg.sha256 | openssl.exe rsautl -decrypt -inkey secret.pem -out test.sig
RSA operation error
2675740:error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is
not 02:rsa_pk1.c:190:
2675740:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
:rsa_eay.c:616:
我試圖用相同和-raw
它完成,沒有錯誤,但結果不是我所期待(這是我所期望的,因爲它不具備PKCS1v1.5填充)。然後我試着反轉輸入文件的字節順序,因爲openssl似乎在抱怨輸入文件(作爲256字節的BIGNUM)略大於模數(作爲256字節的BIGNUM),並且如果您將字節順序,則尾部0變成前導零,並且它較小。它完成了,但結果仍然不正確。
$ perl -e '$a = `cat msg.sha256`; print "".reverse($a);' > msg.sha256r
$ head -256c msg.sha256r | openssl.exe rsautl -encrypt -raw -inkey secret.pem -out test3e.sig
$ head -256c msg.sha256r | openssl.exe rsautl -decrypt -raw -inkey secret.pem -out test3d.sig
是的,我知道我只是在黑暗中跌跌撞撞左右,但你會驚奇地發現多少次,我很幸運這樣...
兩個test3e.sig和test3d.sig做不同意我使用第三方工具的計算。
'-raw'給出了相同的結果(太大)。 – 2013-04-08 19:48:12