我正在生成我的密钥对:
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中有一些方法/格式可以为我提供以下格式的密钥?
发布下一个答案,因为标题和标题字符串在没有正确的字符时会失败:
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));
}
}