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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PyCrypto 與 C 中的 RSA 編碼——RSA_PKCS1_PADDING

PyCrypto 與 C 中的 RSA 編碼——RSA_PKCS1_PADDING

動漫人物 2021-09-24 16:47:58
我的印象是 PyCrypto 是 OpenSSL 的直接包裝器,但我似乎得到了意想不到的結(jié)果。我用 C 寫了一個簡單的測試;int main() {    const unsigned char test[] = "TEST_TEST_TEST";    FILE *privateFile = fopen("private.pem", "r");    RSA *privateRsa = PEM_read_RSAPrivateKey(privateFile, NULL, NULL, NULL);    unsigned char *target = malloc(512);    int len = RSA_private_encrypt(strlen(test), test, target, privateRsa, 1);    for (int i = 0; i < 256; i++) {        printf("%02x", target[i]);    }    printf("\n");}這給了我一個結(jié)果;a7c5832cf6390bcf75612e46c55759167e02173b2c6741ec4779af5d88488df8bfa6a6ba4cfbc93d730dd3b4e681fca34d23c862712954ec85c087d9b36efa725b942fa7d8383019bcbad467a1b31a3b0aeccf85cf1b4e4600801e3d40db75640f7e56f9bbb2a525d58e6decd024002049cadef9feea23f72f0fef72e9d2a5e9209011b7726422561f8fdfc7e983c28b600ff87514b6ea4bb59addfaf8492ba71261d3837d9ae82507ab2f6cb7aaa0fe647f5d8d469b7a5e837b3bdf9994be8e621cdb04cec955ddd44170b9899daec891b492562b0df3d30d50367c710d81400aefadb494d6f13d37237cf015280879d787de4d58ef3a5d61a200dd68642fdf然后我使用了相同的方法private.pem并做了我認(rèn)為在 Python 中等效的操作;from Crypto.Cipher import PKCS1_v1_5from Crypto.PublicKey import RSA這給了我一個非常不同的結(jié)果;ac3de0ad667f26912b71baaf3f0c84198482a1822ef05f1d0b339a9e13be0fdc74c446bf740e14d07edbff1d893eb9a9745ee42501c50a7a0ec1352f96bf72c603afe6d4709ef3ea936a4cda182dfc70d0a76967e79120f02e017e8f9aa30b1b444b5fe46396d6908e1e55febb948e69cc1dcd9f9fbd44f449056d0655489834b564216c81c19f193548a53c77af8683d4c77d06為什么 python 包裝器不會產(chǎn)生與底層 C 庫相同的結(jié)果?我猜我在 Python 方面做了一些不正確的事情,但我不知道那可能是什么。編輯:為了清楚起見,C 代碼正在返回我想要的內(nèi)容,我需要讓 Python 返回相同的內(nèi)容。在進行更多挖掘時,我認(rèn)為我的問題是我需要RSA_PKCS1_PADDING在 Python 代碼中指定。當(dāng)我嘗試在 C 端解密時,我回來了;4144797508:error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01:rsa_pk1.c:103:4144797508:error:04067072:rsa routines:RSA_EAY_PUBLIC_DECRYPT:padding check failed:rsa_eay.c:773:奇怪的是,我在 pycrypto API 中沒有看到任何類型的填充選項。
查看完整描述

2 回答

?
大話西游666

TA貢獻1817條經(jīng)驗 獲得超14個贊

為什么 Python 實現(xiàn)不會產(chǎn)生與 C 代碼相同的結(jié)果?因為您使用的是 PKCS #1.5 簽名算法。

PKCS #1.5 要求在簽名之前向消息添加隨機填充。因此,多次簽署同一條消息每次都會給出不同的值——如果您重復(fù)運行 Python 版本,您將看到該值。OpenSSL 文檔是一個難以理解的泥潭,所以我不能確切地說明為什么每次使用 C 版本都會獲得相同的簽名,但我懷疑您沒有初始化隨機數(shù)生成器或其他東西。


查看完整回答
反對 回復(fù) 2021-09-24
  • 2 回答
  • 0 關(guān)注
  • 267 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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