gpt4 book ai didi

java - 如何将Base64编码的pkcs12内容转换为java.security.PrivateKey?

转载 作者:太空宇宙 更新时间:2023-11-04 14:55:33 29 4
gpt4 key购买 nike

我通过服务帐户使用 Google Directory API,并且在创建服务帐户时收到了 pkcs12 key 。

Google确实支持两种不同的方式来使用它,即将 key 作为java.io.Filejava.security.PrivateKey,对于PoC,我首先使用使用 java.io.File 创建 GoogleCredential 对象的方式,

        GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(serviceAccountId)
.setServiceAccountScopes(Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_USER))
.setServiceAccountUser(serviceAccountUser)
.setServiceAccountPrivateKeyFromP12File(serviceAccountPrivateKeyFile)
.build();

它按预期工作,但在我的实际用例中,我不能依赖文件系统,所以我不能使用第一种方法。因此,我想使用第二种方式实现实际用例,即使用 java.security.PrivateKey ,完成后如下所示。

    GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(serviceAccountId)
.setServiceAccountScopes(Arrays.asList(DirectoryScopes.ADMIN_DIRECTORY_USER))
.setServiceAccountUser(serviceAccountUser)
.setServiceAccountPrivateKey(serviceAccountPrivateKey)
.build();

在我的用例中,我需要上传私钥并将其以 Base64 编码存储在数据库中。现在我需要传递 pkcs12 key 的内容并创建 Googlecredential 对象。为此,我认为第二个选项是最合适的方法,但找不到任何示例来从上传 key 的 base64 编码内容创建 java.security.PrivateKey。

是否可以从 pkcs12 key 的 base64 编码内容创建 java.security.PrivateKey 对象?

或者还有其他方法来实现我的用例吗?

提前致谢

达雷

最佳答案

java.securty.KeyStore 接受 load() 方法的任何 InputStream,因此您可以使用任何获取 .p12 字节的方法来创建它。这是我使用的另一种方法。虽然这仍然使用 .p12 字节的文件,但您可以引入 ByteArrayInputStream 或任何 InputStream 子类:

    private PrivateKey getPrivateKeyFromP12() {
// Google p12 files all have "notasecret" as the pass and "privatekey" as the PK name
String p12p = "notasecret"; // not cool! Change this before exporting your .p12
try {
KeyStore keystore = KeyStore.getInstance("PKCS12");
// This is where you'd adjust to bring in your .p12 bytes or chars
// as an input stream. Passwords are a char array!
keystore.load(
this.getClass().getClassLoader()
.getResourceAsStream("the.p12"),
p12p.toCharArray());
// This key name is fixed by Google, but could be changed
PrivateKey key = (PrivateKey) keystore.getKey("privatekey",
p12p.toCharArray());
return key;
} catch (Exception e) {
LOG.error("Exception while trying to obtain private key",e);
return null;
}

}

关于java - 如何将Base64编码的pkcs12内容转换为java.security.PrivateKey?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23252726/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com