RSA使用Java库生成的预先存在的密钥在C#中加密字符串

时间:2013-04-09 20:48:15

标签: c# java rsa rsacryptoserviceprovider

我需要将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);
    } 

}

问题:

这可能吗?

任何可以让我朝着正确方向前进的样本或文档?

0 个答案:

没有答案