【问题标题】:Android key pair generation in format with -----BEGIN PUBLIC KEY----- and ending with -----END PUBLIC KEY-----Android 密钥对生成格式为 -----BEGIN PUBLIC KEY----- 并以 -----END PUBLIC KEY----- 结尾
【发布时间】:2017-08-30 09:52:19
【问题描述】:

我正在像这样生成我的密钥对:

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

我得到的回报是完美的密钥,但服务器接受的密钥格式是我需要开始和结束标签的格式

-----开始公钥-----
-----结束公钥-----

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

【问题讨论】:

标签: java android public-key-encryption


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多