有一个案例是为了与客户的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#的密文也是每次都一样呢?