我不是數學家(我問什麼,我說在這個崗位原諒!),但據我所知,RSA加密和解密應該是相同的操作: M 1Ë模Nopenssl RSA_private_decrypt和RSA_private_encrypt有什麼區別?
哪裏M是我想要解密/加密的,e是指數,n是模塊(在我的情況下是私有的)。
這樣做的確認如下:當我想以「簽到」明文,我得到了相同的簽名,如果我做了下述任何操作:
RSA_private_encrypt(plain_text.size(), &plain_text[0], &encrypted[0], rsa.get(), RSA_NO_PADDING);
RSA_private_decrypt(plain_text.size(), &plain_text[0], &decrypted[0], rsa.get(), RSA_NO_PADDING);
我的問題是:RSA_private_encrypt文檔指出「對於基於PKCS#1 v1.5的填充模式,flen必須小於RSA_size(rsa) - 11,對於RSA_PKCS1_OAEP_PADDING小於RSA_size(rsa) - 41並且對於RSA_NO_PADDING小於RSA_size(rsa)」。如果操作是相同的,爲什麼我只有在加密情況下才有這個限制? 實際上,如果我嘗試使用比RSA_SIZE短的純文本(本例中爲1024),解密操作會在加密失敗時成功。
請注意,我沒有使用填充(我知道這是不安全的)。
PHP從來不應該暴露這些......不好的安全工程......簽名者應該總是接收文檔,應用消息格式並自己計算哈希。 – jww