亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解碼 base64 字符串并重新編碼返回的字節不會返回相同的字符串

解碼 base64 字符串并重新編碼返回的字節不會返回相同的字符串

飲歌長嘯 2021-12-01 15:04:22
我正在對 base64 字符串進行簡單的解碼。當我重新編碼時,我沒有得到相同的字符串。我錯過了什么?String base64 = "R3df789GSfsb2edfSFSDFuikuikk2349GSfsb2edfSvFSDFR3df789GSfsb2edf";byte[] decoded = Base64.getDecoder().decode(base64.getBytes());String encoded = Base64.getEncoder().encodeToString(decoded);您可以看到該字符串encoded與輸入字符串不同base64:R3df789GSfsb2edfSFSDFuikuikk2349GSfsb2edfSvFSDFR3df789GSfsb2edc=
查看完整描述

1 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

Base64通過從 64 (6 位)可顯示字符(4 * 6 = 24 位)中進行選擇,將 3 個字節(3 * 8 = 24 位)編碼為 4 個字符。有關其工作原理的詳細說明,請參閱維基百科。

因此,對于每 4 個編碼字符,您將獲得 3 個字節。您的輸入是:

R3df 789G Sfsb 2edf SFSD Fuik uikk 2349 GSfs b2ed fSvF SDFR 3df7 89GS fsb2 edf

如您所見,這是 15 個 4 個字符的塊,最后一個塊只有 3 個字符。3 個字符(3 * 6 = 18 位)可以存儲 2 個字節(2 * 8 = 16 位),留下 2 個未使用的位。這 2 位可以具有任何值,因為它們未被使用,但標準是將此類額外位設置為 0。

您的輸入來自 Base64 編碼,該編碼選擇將額外位設置為 1,因此最后一個字符是f,而不是標準的c.

通過=在末尾添加 1 或 2 個符號來將編碼文本填充到完整塊也是很常見的,盡管并不總是必需的。因此,使用 0 作為額外位并添加填充的標準,最終塊變為edc=,但它解碼為與 的非標準最終塊相同的字節edf。


查看完整回答
反對 回復 2021-12-01
  • 1 回答
  • 0 關注
  • 258 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號