[問題] RAS加密結果與Java不同

看板C_Sharp (C#)作者 (heavysupport)時間3年前 (2021/08/11 16:58), 3年前編輯推噓2(2015)
留言17則, 5人參與, 3年前最新討論串1/1
有一個案例是為了與客戶的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

08/11 17:40, 3年前 , 1F
padding模式是什麼?
08/11 17:40, 1F

08/11 17:41, 3年前 , 2F
每次會不一樣應該是用到OAEP padding
08/11 17:41, 2F
模式是RSA/ECB/PKCS1Padding 我用 Encrypt("", RSAEncryptionPadding.Pkcs1) 結果是隨機密文 ※ 編輯: cercloud (118.163.180.56 臺灣), 08/12/2021 12:13:32

08/12 16:03, 3年前 , 3F
有先在內部確定傳進來的明文byte[]都一致嗎?
08/12 16:03, 3F

08/14 18:32, 3年前 , 4F
有,每次都是同一份明文
08/14 18:32, 4F

08/17 02:17, 3年前 , 5F
對方是要加密(encrypt)還是簽章 (sign) ?
08/17 02:17, 5F

08/17 11:37, 3年前 , 6F
Pkcs1也是隨機padding,如果對方期待的是密文都是一致的
08/17 11:37, 6F

08/17 11:38, 3年前 , 7F
那他們應該用的是RSA/ECB/NoPadding
08/17 11:38, 7F

08/17 11:38, 3年前 , 8F
另外你貼的這段是解密的程式碼,不是加密的
08/17 11:38, 8F

08/17 11:42, 3年前 , 9F
說真的比較安全的方法是要對方換作法,至於C#的解法
08/17 11:42, 9F

08/17 11:42, 3年前 , 10F
RSACryptoServiceProvider不支援,要用第三方library
08/17 11:42, 10F

08/18 11:04, 3年前 , 11F
樓上高手。我之前是用ECB,跨平台簡單方便但安全性堪慮
08/18 11:04, 11F

08/20 21:51, 3年前 , 12F
RSA只有ECB是因為從安全或效能來說都不建議直接用RSA對資料
08/20 21:51, 12F

08/20 21:52, 3年前 , 13F
加密,而是用來加密對稱式加密演算法的金鑰,長度一定不會
08/20 21:52, 13F

08/20 21:53, 3年前 , 14F
超過RSA的一個block
08/20 21:53, 14F

08/20 21:53, 3年前 , 15F
資料簡單就用RSA直接加密其實就是太懶了
08/20 21:53, 15F

08/23 09:15, 3年前 , 16F
那時是在刻自製加密通訊,rsa用在交握階段交換金鑰,通訊
08/23 09:15, 16F

08/23 09:15, 3年前 , 17F
主體用的是aes。
08/23 09:15, 17F
文章代碼(AID): #1X4v4-LJ (C_Sharp)
文章代碼(AID): #1X4v4-LJ (C_Sharp)