C# 与 JAVA 的RSA加密通讯

问题遇到的现象和发生背景

公司一个新项目要和第三方公司的JAVA接口用RSA加密通讯数据。我们这边用的是C#,对方给了JAVA的事例代码,公匙、加密内容的明文串和加密后的密文串。通讯方式就是我们这边把明文用公匙加密,然后发给JAVA接口,他们在用密匙进行解密。

问题相关代码,请勿粘贴截图

JAVA事例:

import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.SecureRandom;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class RsaUtils {
//公匙
 public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDBT8KD5nqxWoL3fPkdNSy0kkX7Y+SUnZmi9lsY4TrbHzOF6tfovdHxb1GT+hIQthNWfa5xz6eNNSPvT+yBbhf53/8HlaYbDW1yqz8JdlUl2fQdhuvPyTr+ugVuM5VF4bjQKiHPvpp/l0EPm/snchG2E4UDoWW4PaTdMyUe4G6AEQIDAQAB";
//内容
 public static final String text="sss";
//加密后内容密文
 public static final String text_Encrypt="GLChgp/vaKEW2ZtfskYlUCiwQracrwbb8P2j/m3GCnCwOKIttW3XBKcbIBHX9/wKrfgKxDk1OWTy7V5uvnZzEJzwPTa/L/NRCqch4xNGZ54c0sD7jfPZycaaKix3R59S7lSKSmVuNPp6JuALEzQ1i48zo8SkvFyPeDSOnGYQsiA=";

 /** */
 /**
 * RSA 最大加密明文大小
 */
 private static final int MAX_ENCRYPT_BLOCK = 117;
 /** */
 /**
 * RSA 最大解密密文大小
 */
 private static final int MAX_DECRYPT_BLOCK = 128;

 public static String encrypt(String value, String publicKey) throws Exception {
 byte[] data = value.getBytes(StandardCharsets.UTF_8);
 X509EncodedKeySpec x509KeySpec = new 
X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
 KeyFactory keyFactory = KeyFactory.getInstance("RSA");
 Cipher cipher = Cipher.getInstance("RSA");
 cipher.init(Cipher.ENCRYPT_MODE, keyFactory.generatePublic(x509KeySpec));
 int inputLen = data.length;
 ByteArrayOutputStream out = new ByteArrayOutputStream();
 int offSet = 0;
 byte[] cache;
 int i = 0;
 // 对数据分段加密
 while (inputLen - offSet > 0) {
 if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
 cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK);
 } else {
 cache = cipher.doFinal(data, offSet, inputLen - offSet);
 }
 out.write(cache, 0, cache.length);
 i++;
 offSet = i * MAX_ENCRYPT_BLOCK;
 }
 byte[] encryptedData = out.toByteArray();
 out.close();
 return Base64.getEncoder().encodeToString(encryptedData);
 }
我想要达到的结果
哪位大神能帮把java事例翻译为C#的,然后用公匙加密明文能跟java给的内容加密串对上就行。我这是试过好多种RSA方法,加密后一直都无法跟JAVA提供的内容加密串对上。

你的c#代码能贴出来看下吗?

已解决,原来是理解错了。RSA是非对称加密,用公匙加密,私匙解密。之前还是按照以前的思路,觉得JAVA用公匙加密的串和C#用公匙加密的串应该一样。所以不管怎么换方法对比,两个加密后的串都不一样。后来想通后跟对方要了个私匙加密的串过来,直接在C#用公匙解密,是可以直接通过的。又在C#端用公匙加了个密,发给对方。对方用JAVA的私匙也可以解开。至此解决完毕。其实之前弄的方法是没问题的,只是理解偏差了。