2012-10-10 71 views
1

我使用apache庫編碼爲base64。但是這次問題很典型。我有一個b64編碼的字符串。base64編碼問題,java

MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD/euDuzBjDANBgkqhkiG9w0BAQUFADCB"+ 
"5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn 

其認證證書(.CER)文件的一部分。我只是解碼它,並再次編碼它,但結果有點不同。結果字符串是,

「MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD/euDuzBjDANBgkqhkiG9w0BAQUFADA」 +「/ 5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn」

所不同的是在第二行的第一行和起動結束。 CB被替換爲A/

此更改使我的證書無效。問題出在哪裏?

+2

如果添加用於編碼/解碼字符串的代碼,說起來會容易得多。 – zvez

+0

首先它似乎是與UTF-8相關的問題。爲此,我嘗試以UTF-8讀取此字符串,並以UTF-8的方式將其提供給Base64.encodeBase64()方法。但結果是完全不同的。 –

+0

'String partOfCer =「MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD/euDuzBjDANBgkqhkiG9w0BAQUFADCB」+ 「5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn」; byte [] dec1_byte = Base64.decodeBase64(partOfCer); String dec1 = new String(dec1_byte); Base64.encodeBase64String(dec1.getBytes()));' –

回答

4

問題出在您的中間字符串轉換。如果你只使用字節數組,一切都很好。

public static void main(String args[]) { 
     String partOfCer = "MIIHSjCCBjKgAwIBAgIQQuw1emUfNRlPD/euDuzBjDANBgkqhkiG9w0BAQUFADCB" + "5TELMAkGA1UEBhMCRVMxIDAeBgkqhkiG9w0BCQEWEWFjQGFjYWJvZ2FjaWEub3Jn"; 
     byte[] dec1_byte = Base64.decodeBase64(partOfCer.getBytes()); 
//  String dec1 = new String(dec1_byte); 
     byte[] newBytes = Base64.encodeBase64(dec1_byte); 
     String newStr = new String(newBytes); 
     System.out.println(partOfCer); 
     System.out.println(newStr); 
     System.out.println(partOfCer.equals(newStr)); 
    } 
+0

ok @Zvezdochet它的工作......謝謝。 但是,如果我將字節轉換爲字符串,然後將字符串作爲輸入,它不工作的原因是什麼...? –

+0

@RaviAmlani你不能從一個任意的字節數組中創建一個'String'(就像你正在用'String dec1 = new String(dec1_byte);''做的那樣)。類'String'將使用字符編碼將字節解釋爲字符。 – Jesper