[爆卦]rsa加密範例是什麼?優點缺點精華區懶人包

為什麼這篇rsa加密範例鄉民發文收入到精華區:因為在rsa加密範例這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者cercloud (heavysupport)看板C_Sharp標題[問題] RSA加密結果與J...


有一個案例是為了與客戶的API對接
對方有提供範例檔,不過是使用java寫的

在RSA加密的部分程式碼像這樣:

public byte[] rsaPrivateCipher(int opmode, byte[] PrivateKey, byte[] text,
String padding) {
byte[] bResult = null;
Cipher cipher = null;
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(PrivateKey);
KeyFactory keyFactory;

try {
keyFactory = KeyFactory.getInstance("RSA");
Key aKey = keyFactory.generatePrivate(keySpec);

cipher = Cipher.getInstance(padding);
cipher.init(opmode, aKey);
bResult = cipher.doFinal(text);

} catch (NoSuchAlgorithmException | InvalidKeySpecException |
NoSuchPaddingException | InvalidKeyException
| IllegalBlockSizeException | BadPaddingException e) {
e.printStackTrace();
}

return bResult;
}


同樣的內容,每次加密出來的密文都會一樣

但是使用C#的RSACryptoServiceProvider,呼叫Encrypt方法出來的密文卻是隨機的

金鑰是同一把,使用CspParameters從金鑰容器中取出再傳入RSACryptoServiceProvider
但若是使用SignData的話又可以算出同樣的RSA簽章

由於回傳隨機密文對方沒辦法驗證
只好裝IKVM的套件來還原對方的範例,讓密文是一致的

想請問為何同樣都是RSA加密,輸出的結果卻是兩種不一樣的結果?
有沒有辦法能讓C#的密文也是每次都一樣呢?

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.180.56 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1628672318.A.553.html
※ 編輯: cercloud (118.163.180.56 臺灣), 08/11/2021 17:00:43
ssccg: padding模式是什麼? 08/11 17:40
ssccg: 每次會不一樣應該是用到OAEP padding 08/11 17:41
模式是RSA/ECB/PKCS1Padding
我用
Encrypt("", RSAEncryptionPadding.Pkcs1)
結果是隨機密文
※ 編輯: cercloud (118.163.180.56 臺灣), 08/12/2021 12:13:32
kobe8112: 有先在內部確定傳進來的明文byte[]都一致嗎? 08/12 16:03
cercloud: 有,每次都是同一份明文 08/14 18:32
t64141: 對方是要加密(encrypt)還是簽章 (sign) ? 08/17 02:17
ssccg: Pkcs1也是隨機padding,如果對方期待的是密文都是一致的 08/17 11:37
ssccg: 那他們應該用的是RSA/ECB/NoPadding 08/17 11:38
ssccg: 另外你貼的這段是解密的程式碼,不是加密的 08/17 11:38
ssccg: 說真的比較安全的方法是要對方換作法,至於C#的解法 08/17 11:42
ssccg: RSACryptoServiceProvider不支援,要用第三方library 08/17 11:42
Litfal: 樓上高手。我之前是用ECB,跨平台簡單方便但安全性堪慮 08/18 11:04
ssccg: RSA只有ECB是因為從安全或效能來說都不建議直接用RSA對資料 08/20 21:51
ssccg: 加密,而是用來加密對稱式加密演算法的金鑰,長度一定不會 08/20 21:52
ssccg: 超過RSA的一個block 08/20 21:53
ssccg: 資料簡單就用RSA直接加密其實就是太懶了 08/20 21:53
Litfal: 那時是在刻自製加密通訊,rsa用在交握階段交換金鑰,通訊 08/23 09:15
Litfal: 主體用的是aes。 08/23 09:15

你可能也想看看

搜尋相關網站