Android密钥对生成格式为----- BEGIN PUBLIC KEY ---以----- END PUBLIC KEY结尾-----

问题描述 投票:1回答:1

我正在生成我的密钥对:

 KeyPair kp = null;
 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
 kpg.initialize(2048);
 kp = kpg.generateKeyPair();

我得到这样的公钥:

    PublicKey publicKey = kp.getPublic();
    byte[] publicKeyBytes = publicKey.getEncoded();
    String publicKeyEncoded = new String(Base64.encode(publicKeyBytes, Base64.DEFAULT));

我得到的回报是非常好的密钥,但是服务器正在接受我需要具有开始和结束标签的格式的密钥

-----开始公钥----- ----- END PUBLIC KEY -----

我应该在编码密钥中自己添加这些标记,还是Java中有一些方法/格式可以为我提供以下格式的密钥?

java android public-key-encryption
1个回答
0
投票

发布下一个答案,因为标题和标题字符串在没有正确的字符时会失败:

public class KeyManager {

    public static final String TAG = KeyManager.class.getSimpleName();

    public static String getPublicKey(){
        KeyPair kp = generateRSAKeys();
        assert kp != null;
        PublicKey publicKey = kp.getPublic();
        String key = encodeKey(publicKey.getEncoded());
        return addHeaders(key);  // --> ADDED HEADERS FOR SERVER COMPATIBILITY
    }

    private static String getPrivateKey(){
        KeyPair kp = generateRSAKeys();
        assert kp != null;
        PrivateKey privateKey = kp.getPrivate();
        return encodeKey(privateKey.getEncoded());
    }

    private static KeyPair generateRSAKeys() {
        try {
            KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
            kpg.initialize(2048);
            return kpg.generateKeyPair();

        } catch (NoSuchAlgorithmException e) {
            Log.e(TAG,"[ENCRYPT] NoSuchAlgorithmException error: ");
            e.printStackTrace();
            return null;

        } catch (Exception e) {
            Log.e(TAG,"[ENCRYPT] generateRSAKeys error: ");
            e.printStackTrace();
            return null;
        }
    }

    private static String addHeaders(String key){
        String headline = "-----BEGIN PUBLIC KEY-----\n";
        String footline = "-----END PUBLIC KEY-----\n";
        return headline+key+footline;
    }

    private static String encodeKey(byte[] keyBytes) {
        return new String(Base64.encode(keyBytes, Base64.DEFAULT));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.