java - Bouncy CasSTLe J2ME加载现有私钥

标签 java java-me rsa bouncycastle private-key

我有 PEM 或 DER 私钥,即现有 key 。我怎样才能加载这个 key

PrivateKeyFactory.createKey 或放入 AsymmetryCipherKeyPair

我尝试过这个:

InputStream inKey = getClass().getResourceAsStream("/samsjava/user_key_pk8.der");
                byte[] binKey = new byte[inKey.available()];
                inKey.read(binKey, 0, binKey.length);
                inKey.close();


                privKey = PrivateKeyFactory.createKey(binKey);
                keyPair = new AsymmetricCipherKeyPair(new AsymmetricKeyParameter(false), privKey);

                rsaPriv = (RSAPrivateCrtKeyParameters)keyPair.getPrivate();
                rsaPub = (RSAPrivateCrtKeyParameters)keyPair.getPublic();

接下来我可以尝试什么?

最佳答案

我在 Java 中尝试过这个东西,这应该会让我走上 J2ME 的正确轨道。这是代码:

public class EncrypDecrypt {
private RSAPrivateCrtKey rsaPriv;
private RSAPublicKey rsaPub;
private BASE64Decoder decoder;
private BASE64Encoder encoder;

public EncrypDecrypt(){
    decoder = new BASE64Decoder();
    encoder = new BASE64Encoder();
    byte[] buffer;
    try {
        FileInputStream in = new FileInputStream("pathtofile.pfx");
        KeyStore kStore = KeyStore.getInstance("PKCS12");
        kStore.load(in, null);

        PrivateKey privKeyEntry = (PrivateKey)kStore.getKey("Key Alias", null); 
        rsaPriv = (RSAPrivateCrtKey) privKeyEntry;
    } catch (Exception ex) {
        Logger.getLogger(EncrypDecrypt.class.getName()).log(Level.SEVERE, null, ex);
    }       
}

public String encrypt(String data){
    try{
        AsymmetricBlockCipher eng = new RSAEngine();
        eng = new PKCS1Encoding(eng);
        RSAKeyParameters publicKey = new RSAKeyParameters(true, rsaPriv.getModulus(), rsaPriv.getPublicExponent());
        eng.init(true, publicKey);

        byte[] encrypted = eng.processBlock(data.getBytes(), 0, data.getBytes().length);
        return encoder.encode(encrypted);
    }
    catch(Exception err){
        return "";
    }
}

public String decrypt(String data){
    try
    {
        byte[] encrypted = decoder.decodeBuffer(data);
        AsymmetricBlockCipher eng = new RSAEngine();
        eng = new PKCS1Encoding(eng);
        RSAKeyParameters privateKey = new RSAKeyParameters(true, rsaPriv.getModulus(), rsaPriv.getPrivateExponent());
        eng.init(false, privateKey);

        byte[] decrypted = eng.processBlock(encrypted, 0, encrypted.length);
        return new String(decrypted);
    }
    catch(Exception err){
        return "";
    }
}
}

关于java - Bouncy CasSTLe J2ME加载现有私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14303333/

相关文章:

java-me - 向 j2me 应用程序添加图标

java - "undecompilable"java源代码

c# - C#公钥中的RSA与私钥相同吗?

swift - 如何快速处理长整数的答案

java - 为什么我的图标不会重新绘制?

java - 以编程方式执行 spring roo

java - 如何在诺基亚asha sdk1.0中使textArea可滚动

xml - 如何将 XML RSA key 转换为 PEM 文件?

java - 如何在Netbeans中设置路径?

java - 在请求正文中使用时配置属性不会 Autowiring ?