我有一个 .p12 文件,我想导出公钥和私钥。我用了这个方法:
FileInputStream fm = new FileInputStream("C:\\cert.p12");
KeyStore ks = KeyStore.getInstance("PKCS12");
try {
ks.load(fm, "pass".toCharArray());
} catch (Exception e) {
e.printStackTrace();
}
Key key = ks.getKey("cert", "pass".toCharArray());
Certificate cert = ks.getCertificate("cert");
PublicKey publicKey = cert.getPublicKey();
System.out.println("Public key");
System.out.println(Base64.getEncoder().encodeToString(
publicKey.getEncoded()));
fm.close();
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用 openssl 命令并将其转换为 .cer 文件:
openssl pkcs12 -in cert.p12 -out cert.cer -nodes
Run Code Online (Sandbox Code Playgroud)
第三种方法是将此 cert.cer 文件加载到密钥库并获取密钥
FileInputStream fm1;
fm1 = new FileInputStream("C:\\cert.cer");
CertificateFactory f = CertificateFactory.getInstance("X.509");
X509Certificate certificate = (X509Certificate)f.generateCertificate(fm1);
PublicKey pk = certificate.getPublicKey();
System.out.println("Public key");
System.out.println(Base64.getEncoder().encodeToString(pk.getEncoded()));
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么第一个公钥与第三种方法中相同但与第二种方法中不同。我应该如何导出这个密钥?感谢您的回复
我有 3 个模型:Events、groups和users。
关系:
事件 - 用户 - 多对多。组 - 用户 - 多对多。
将有一场小组聊天和一场内部活动。我将实现两个或多个用户之间的聊天。最好的设计方法是什么?我创建了聊天模型以及聊天和用户之间的多对多关系。
第一个想法:群组和事件聊天的成员将分别存储在event_users和group_users表中。只有用户之间的聊天记录才会存储在chat_users.
第二个想法:chat_users将与event_users表同步group_users。优点是管理聊天的逻辑分离,不会有很多复杂的查询。