簡體   English   中英

Java Base64編碼提供與C base64編碼不同的結果

[英]Java Base64 encode gives different results than C base64 encode

我嘗試編碼這個字節數組:

[237, 217, 204, 218, 109, 227, 157, 145, 35, 152, 85, 142, 182, 180, 120, 8]

使用Java庫org.apache.commons.codec.binary.Base64.encodeBase64org.bouncycastle.util.encoders.Base64.encode這是結果:

[55, 100, 110, 77, 50, 109, 51, 106, 110, 90, 69, 106, 109, 70, 87, 79, 116, 114, 82, 52, 67, 65, 61, 61]

(注意末尾的雙'='填充字符)

使用base64.c Copyright (c) 1995-2001 Kungliga Tekniska Högskolan (Royal Institute of Technology, Stockholm, Sweden)這是輸出:

[55, 100, 110, 77, 50, 109, 51, 106, 110, 90, 69, 106, 109, 70, 87, 79, 116, 114, 82, 52, 67, 66, 72, 114]

有誰能解釋為什么? 如何使Java / C庫以相同的方式工作?

每個Base64 ASCII字符保存6位信息(2 6 = 64),因此4個Base64字符包含3個字節信息。 你有16個字節,所以一個字節保留在最后,需要2個Base64字符,並且要使組最多4個字符,添加兩個padding = s。

介意:用JavaSE 8來了一個類Base64來替換幾個老類。

Base64有幾個應用領域,各種變化很小:可以省略填充,添加換行符以限制行長度,等等。 Java 8的Base64甚至可以選擇不兼容的URL和文件名safeversion,其中+/被替換。

Base64適用於3個字節的塊, = padding可以使輸出大小達到3的倍數。這個填充是可選的,如果不存在那么你可以通過在嘗試之前檢查數組長度來手動添加它使用Java代碼進行解碼。

暫無
暫無

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

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