簡體   English   中英

用 Java 解碼 Base64 JKS 信任存儲

[英]Decode Base64 JKS Trust Store in Java

我基於 64 個 JKS 信任存儲字符串,我正在嘗試對其進行解碼。 當我使用這個網站解碼文件時,我得到了一個可下載的文件,其中包含以下詳細信息: 在此處輸入圖片說明 當我將它與 -Djavax.net.ssl.trustStore=path-to-file 一起使用時,此文件正在工作

現在我正在嘗試使用 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));
}

這樣我得到的 hexdump 與我從網站下載的相同,但沒有空格和換行符。 在這兩種方式中,我都收到以下錯誤:

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可以讀取它,你就很好。

除了了解 base 64 編碼方案 ( https://en.wikipedia.org/wiki/Base64 ) 之外,您可能還需要了解有關字節放置的任何大端問題。 編碼只是取前 8 位,對其中的 6 位進行編碼,將接下來的 8 位連接到剩余的 2 位並對其中的 6 位進行編碼,將接下來的 8 位連接到剩余的 4 位並對其中的 6 位進行編碼,並對最后 6 位進行編碼。如果您在 3 字節組的中間點擊 eof,有一個 = 填充系統來編碼它。

唯一的技巧是從正確的一端取出您的位並將您的位連接到正確的一端。 如果您正在編碼二進制非字節數據(如整數),您必須了解它們是如何編碼的,因為整數的低字節可能是分別為小端或大端編碼的第 1 個或第 4 個字節。

添加空格或換行符等只是為了使其更適合文本編輯器、屏幕查看、電子郵件、人類等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM