Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中解码Base64 JKS信任存储_Java_Security_Truststore - Fatal编程技术网

在Java中解码Base64 JKS信任存储

在Java中解码Base64 JKS信任存储,java,security,truststore,Java,Security,Truststore,我已经基于64 JKS信任存储字符串,我正在尝试解码。 当我用它来解码文件时,我得到了一个可下载的文件,其中包含以下详细信息: 当我将此文件与-Djavax.net.ssl.trustStore=文件路径一起使用时,它正在工作 现在,我尝试自己使用Java解码文件并将其写入文件: byte[] decoded = Base64.getDecoder().decode(data); FileOutputStream fos = new FileOutputStream(new File(baseP

我已经基于64 JKS信任存储字符串,我正在尝试解码。 当我用它来解码文件时,我得到了一个可下载的文件,其中包含以下详细信息: 当我将此文件与-Djavax.net.ssl.trustStore=文件路径一起使用时,它正在工作

现在,我尝试自己使用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));
}
通过这种方式,我得到了与我从网站下载的相同的hextump,但没有空格和换行符。 在这两种情况下,我都会得到以下错误:

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)
谢谢你的帮助

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

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

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


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

除了了解base 64编码方案(),您可能还需要了解有关字节位置的任何大端问题。编码只需取前8位,编码其中6位,将下一个8位连接到剩余的2位,编码其中的6位,将下一个8位连接到剩余的4位,编码其中的6位,然后编码最后的6位。如果在3字节组中点击eof,则有一个=填充系统对其进行编码

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


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

除了了解base 64编码方案()之外,您可能还需要了解有关字节位置的任何大端问题。编码只需取前8位,编码其中6位,将下一个8位连接到剩余的2位,编码其中的6位,将下一个8位连接到剩余的4位,编码其中的6位,然后编码最后的6位。如果在3字节组中点击eof,则有一个=填充系统对其进行编码

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


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

正如David所建议的,问题是我从文本编辑器打开了“正确”文件,从IntelliJ打开了生成的文件。正如David所建议的,问题是我打开了“正确”文件文本编辑器中的文件和IntelliJ中生成的文件。