我正在生成我的 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/