我正在尝试生成一个JSON文件,其中包含我需要传输的所有必需信息,并在另一个系统上执行进一步操作。其中一个字段是java证书。因为我只需要在另一个系统上复制文件的内容,我认为直接读取内容然后写入文件就可以了。但在加载新写入的文件时,我得到了:
Caused by: java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658)
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)
这样做的正确方法是什么?
目前,我正在阅读原始证书:
FileUtils.readFileToString(originalTrustFile);
写一个我正在使用的新文件:
FileUtils.writeByteArrayToFile(trustFile, trustJsonContent.getBytes());
答案 0 :(得分:1)
尽管我想在某些JSON文件中嵌入密钥库看起来很奇怪,但是下面你可以找到一种将二进制数据作为String放入/取出JSON字段的正确方法。
If Not IsNull(Me.OpenArgs) Then
With Me.RecordsetClone
.FindFirst "Ref=" & Me.OpenArgs
If Not .NoMatch Then
Me.Bookmark = .Bookmark
End If
End With
End If
反对你的初始方法,上面会产生保证安全的字符串,它不会干扰JSON保留符号,因此在转义或反序列化时不会被破坏
注1 :对于Java 7及更早版本,您需要在类路径中使用apache commons-codec库,并使用非常相似的import java.util.Base64; //for Java 8
import org.apache.commons.io.FileUtils;
//encode to Base64
byte[] binaryFileBytes = FileUtils.readFileToByteArray(originalTrustFile);
String jsonFieldValue = Base64.getEncoder().encodeToString(binaryFileBytes);
//decode from Base64
String jsonFieldValue = ... //obtain from your JSON
byte[] binaryFileBytes = Base64.getDecoder().decode(jsonFieldValue);
FileUtils.writeByteArrayToFile(trustFile, binaryFileBytes);
。请参阅javadoc有关如何使用的方法,请参阅方法org.apache.commons.codec.binary.Base64
和encodeBase64String(byte[])
注意2 :Base64 format对二进制数据的初始大小产生的开销增加了33%,因此必须谨慎使用相当大的文件