有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Bouncy Castle J2ME加载现有私钥

我有一个PEM或DER私钥,一个现有密钥。我怎样才能把这把钥匙装进去

PrivateKeyFactory.createKey or into an AsymmetricCipherKeyPair

我试过这个:

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();

下一步我能试试什么


共 (1) 个答案

  1. # 1 楼答案

    我在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 "";
        }
    }
    }