[問題] RAS加密結果與Java不同
有一個案例是為了與客戶的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
08/11 17:40, 1F
→
08/11 17:41,
3年前
, 2F
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
08/12 16:03, 3F
→
08/14 18:32,
3年前
, 4F
08/14 18:32, 4F
→
08/17 02:17,
3年前
, 5F
08/17 02:17, 5F
→
08/17 11:37,
3年前
, 6F
08/17 11:37, 6F
→
08/17 11:38,
3年前
, 7F
08/17 11:38, 7F
→
08/17 11:38,
3年前
, 8F
08/17 11:38, 8F
→
08/17 11:42,
3年前
, 9F
08/17 11:42, 9F
→
08/17 11:42,
3年前
, 10F
08/17 11:42, 10F
推
08/18 11:04,
3年前
, 11F
08/18 11:04, 11F
→
08/20 21:51,
3年前
, 12F
08/20 21:51, 12F
→
08/20 21:52,
3年前
, 13F
08/20 21:52, 13F
→
08/20 21:53,
3年前
, 14F
08/20 21:53, 14F
→
08/20 21:53,
3年前
, 15F
08/20 21:53, 15F
推
08/23 09:15,
3年前
, 16F
08/23 09:15, 16F
→
08/23 09:15,
3年前
, 17F
08/23 09:15, 17F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章