我需要将C#移植到现有的有效Java系统的一部分,该系统处理字符串的加密/解密。我的C#解决方案将加密字符串,现有的Java系统需要能够解密该字符串。
两个系统都需要使用现有的私钥和公钥。密钥是从Java系统生成的(" .key"扩展名)。假设两个系统都可以安全可靠地访问相同的密钥文件。
我找到的最接近的是这个帖子(RSA .NET encryption Java decryption),但它使用了RSACryptoServiceProvider.FromXmlString()。大多数其他示例涉及使用RSACryptoServiceProvider生成您自己的密钥,并在同一解决方案中加密/解密所有密钥。简而言之,我无法找到任何方法来实现这一目标。
供参考,这里是当前处理加密的相关Java代码(明显的剪切/粘贴作业,所以请忽略小的语法错误;再次,这目前工作正常)
import java.io.IOException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.crypto.Cipher;
import org.apache.commons.codec.binary.Base64;
public class Encryptor{
private static final String XFROM = "RSA";
private static PublicKey iPubKey;
public String encryptString() {
// init
byte[] pkeyByte = Util.grabKey("keys/private.key");
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(pkeyByte);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
iPubKey = keyFactory.generatePublic(pubKeySpec);
// encrypt
String uid = "string_to_encrypt";
byte[] dataBytes = uid.getBytes();
byte[] encBytes = encrypt(dataBytes, iPubKey, XFROM);
String result = Base64.encodeBase64String(encBytes);
Return result;
}
private static byte[] encrypt(byte[] inpBytes, PublicKey key, String xform) throws Exception {
Cipher cipher = Cipher.getInstance(xform);
cipher.init(Cipher.ENCRYPT_MODE, key);
return cipher.doFinal(inpBytes);
}
}
问题:
这可能吗?
任何可以让我朝着正确方向前进的样本或文档?