当前位置: 首页 > 知识库问答 >
问题:

用Java解码Base64 JKS信任存储

宰父淳
2023-03-14

现在,我尝试自己用Java解码文件,并将其写入文件:

byte[] decoded = Base64.getDecoder().decode(data);
FileOutputStream fos = new FileOutputStream(new File(basePath));
fos.write(decoded);

这样我就得到了不可读的字符,比如���� .

我还尝试将字节数组转换为字符串:

StringBuilder sbHexDump = new StringBuilder();
for (byte b : decoded) {
    sbHexDump.append(String.format("%02x", b));
}

通过这种方式,我得到了与我从网站下载的相同的六转储,但是没有空格和换行符。在这两种情况下,我得到以下错误:

java.io.IOException: Invalid keystore format
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:663)
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)
    at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
    at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)
    at java.security.KeyStore.load(KeyStore.java:1445)

我很感激你的帮助

共有2个答案

毛德曜
2023-03-14

除了知道基本64编码方案(https://en.wikipedia.org/wiki/Base64),您可能需要了解有关字节位置的任何大端问题。编码就是取前8位,编码其中的6位,将下一个8位连接到剩余的2位,编码其中的6位,将下一个8位连接到剩余的4位,编码其中的6位,然后编码最后的6位。如果你在一个3字节的组中点击eof,就会有一个=填充系统对其进行编码。

唯一的诀窍是从正确的一端取位,并将位连接到正确的一端。如果要对二进制非字节数据(如整数)进行编码,则必须知道它们是如何编码的,因为整数的低位字节可能是第一字节或第四字节,分别为低位字节或大端字节编码。

添加空格或换行符等只是为了让文本编辑器、屏幕查看、电子邮件、人类等更容易接受。

冀萧迟
2023-03-14

这样我就得到了不可读的字符,比如���� .

是的,那又怎样?JKS是一种二进制格式。并非所有字节都映射到可打印字符。只要keytool能读,你就行了。

 类似资料:
  • 我写一个java应用程序连接到数据库与ssl连接使用jTDS。我已经向连接URL添加了属性ssl=需要,以启用ssl连接。 但是我找不到如何配置属性,在那里我可以指定使用哪个信任存储以及它的密码是什么?此处列出了所有jTDS连接属性:http://jtds.sourceforge.net/faq.html 根据此链接,SQL server jdbc驱动程序具有以下类型的属性trustStore和t

  • 我目前正在使用Weblogic 12c(12.1.1.0)。我有一个特殊的问题,我无法解决它。我已将服务器配置为使用自定义密钥存储和信任存储。我用的是-Djavax。网调试=用于调试的ssl。当服务器启动时,部署的应用程序使用https连接到另一个应用程序进行验证。在此连接过程中,使用自定义信任存储验证其证书。 验证按预期完成,然后服务器启动而不报告任何错误。现在,一旦我访问IE上的应用程序并执行

  • 问题内容: 据我了解,密钥库通常会保存私钥/公钥,而信任库通常只保存公钥(并代表你打算与之通信的受信任方的列表)。好吧,这是我的第一个假设,因此,如果这不正确,那么我可能起步并不顺利。 不过,我很想了解使用keytool时如何/何时区分商店。 因此,到目前为止,我已经使用 这将创建我的keystore.ks文件。我回答yes了我是否信任bob的问题,但是我不清楚这是否创建了密钥库文件或信任库文件?

  • 摘要:Java选项允许Java使用计算机帐户的Windows信任存储。什么选项允许它对用户帐户使用Windows信任存储? 我们有一个在Windows客户端上运行的Java应用程序。应用程序从各种来源获取数据,其中一些来源使用的证书不在默认的文件中。 当用户选择访问外部数据的项目时,系统会提示他们下载外部站点的证书。由于我们的安全设置,文件对用户是只读的。由于JRE无法将证书导入,因此无法下载外部

  • 我想用自签名证书连接到TLS服务器,所以我需要一个自定义信任存储。似乎绝对需要密码才能导入证书,但我真的不需要密码保护信任存储区。使用标准密码“changeit”可以工作,但我更希望没有密码。 请注意,这是一个“信任存储”,而不是“密钥存储”,因此信任存储中根本没有秘密材料:只有服务器的证书,因此客户机可以验证服务器是可信的。 使用可以吗?是否有其他工具可以从信任存储区中移除密码?了解到身份验证信

  • 我想在java中创建一个https客户端,它最初没有任何CA证书可信任。因为我不希望JVM使用默认的cacerts文件,所以我应该创建一个空的信任存储并将其指向JVM<我怎样才能创建一个空的信任存储?