簡體   English   中英

Apache通用base64解碼和Sun base64解碼

[英]Apache commons base64 decode and Sun base64 decode

byte[] commonsDecode = Base64.decodeBase64(data);
debug("The data is " + commonsDecode.length + " bytes long for the apache commons base64 decoder.");
BASE64Decoder decoder = new BASE64Decoder();
byte[] sunDecode = decoder.decodeBuffer(data);
Log.debug("The data is " + sunDecode.length + " bytes long for the SUN base64 decoder.");

請解釋為什么這兩個方法調用會為生成的字節數組生成不同的長度。 我最初認為它可能與字符編碼有關,但如果是這樣,我不能正確理解所有問題。 上述代碼按照上面顯示的順序在同一系統和同一應用程序中執行。 因此該系統上的默認字符編碼將是相同的。

輸入(測試)數據:下面是Java String的System.out.println。

qFkIQgDq jk3ScHpqx8BPVS97YE4pP/nBl5Qw7mBnpSGqNqSdGIkLPVod0pBl Uz7NgpizHDicGzNCaauefAdwGklpPr0YdwCu4wRkwyAuvtDmL0BYASOn2tDw72LMz5FChtSa0CoCBQ2ARsFG2GdflnIWsUuBQapX73ZBMiqqm  ZCOnMRv9Ol8zT1TECddlKZMYAvmjANgq0sBPyUMF7co XY9BYAjV3L/cA8CGQpXGdrsAgjPKMhzk4hh1GAoQ1soX2Dva8p3erPJ4sy2Vcb6lS1Hap9FR0AZFawbJ10FFSTg10wxc24539kYA6xxq/TFqkhaEoSyTqjXjvo1SA==

Apache commons解碼器說它是252個長度的字節數組。 Java Sun解碼器說256。

解碼數據無效Base64數據。

有效的Base64數據可以包含空格。 通常,它每72個字符有一個換行符。 但是,您的數據包含隨機位置的空格。 如果它們被刪除(因為每個Base64解碼器應該這樣做),仍然有339個字符。 但是,有效的Base64數據必須是4個字符的倍數。

有趣的是,您的數據不包含加號。 我懷疑它曾經包含它們但它們可能已經被傳輸中的某個空間所取代。 如果用加號替換所有空格,則Base64數據有效,解碼數據的長度為256字節:344個字符/ 4 * 3 - 2個填充字符。

我進一步懷疑Base64數據是在沒有正確URL編碼的URL中使用的。 這是失蹤加號的可能原因。 請注意,Base64編碼數據不是URL安全的。 加號和等號都需要轉義。

暫無
暫無

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

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