java - Android key 对生成格式为 -----BEGIN PUBLIC KEY----- 并以 -----END PUBLIC KEY----- 结尾

标签 java android public-key-encryption

我正在生成我的 key 对,如下所示:

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

我得到的返回是完美的 key ,但服务器正在接受我需要具有开始和结束标签的格式的 key

-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----

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

最佳答案

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

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

关于java - Android key 对生成格式为 -----BEGIN PUBLIC KEY----- 并以 -----END PUBLIC KEY----- 结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45957207/

相关文章:

c# - 为公钥 RSA 加密 C# .net 创建 .pem 文件

java - 试图将 Activity 转换为 fragment

java - Android SimpleDateFormat 返回上午和下午的点

android - 自定义 ProgressDialog 扩展 Dialog 或 ProgressDialog?

android - 如何在 android 中关闭搜索 View 后重置 ListView ?

linux - 如何将 PKCS#12 导入 Seahorse

java - 在纯 IPv6 网络上绑定(bind)到 Java 中的 AnyLocalAddress (0.0.0.0)

java - 在 Java 中,如何定义返回多个答案中最佳答案的 Future<V>?

java - 如何使用 ANT 任务生成 EJB 3 stub

c++ - 以编程方式创建和签署公钥/私钥对