如何将Java证书文件编写为Json字符串字段?

时间:2017-08-25 17:26:43

标签: java json

我正在尝试生成一个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());

1 个答案:

答案 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.Base64encodeBase64String(byte[])

注意2 Base64 format对二进制数据的初始大小产生的开销增加了33%,因此必须谨慎使用相当大的文件