第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

將字節(jié)數(shù)組解碼為包含“-”和“_”等字符的 base64 時出錯

將字節(jié)數(shù)組解碼為包含“-”和“_”等字符的 base64 時出錯

明月笑刀無情 2021-10-27 09:44:52
我正在嘗試對字節(jié)數(shù)組進(jìn)行 base64 解碼,只要我的字節(jié)數(shù)組不包含任何像“-”或“_”這樣的字符,一切都運行良好。但是每當(dāng)字節(jié)數(shù)組包含“-”時,我都會收到一個異常java.lang.IllegalArgumentException: Illegal base64 character 2d    at java.util.Base64$Decoder.decode0(Base64.java:714)    at java.util.Base64$Decoder.decode(Base64.java:526)當(dāng)字節(jié)數(shù)組包含'_'時,異常是java.lang.IllegalArgumentException: Illegal base64 character 5f    at java.util.Base64$Decoder.decode0(Base64.java:714)    at java.util.Base64$Decoder.decode(Base64.java:526)即字符 2d 到 5f 之后的代碼差異。這些代碼是什么。無論代碼中的這些字符如何,我如何解碼任何值?這是我的代碼片段:import java.util.Properties;import java.util.Base64;import java.io.*;...public class BasicSample {    public static void main(String[] args) {      byte[] encoded = res.getBytes("s_id");      System.out.printf("\nInside Byte %s\n",new String(encoded) );      try {        byte[] decoded = Base64.getDecoder().decode(encoded);        System.out.printf("\nDecoded Byte %s\n",new String(decoded, "UTF-8") );      } catch(Exception e) {        e.printStackTrace();      }   }}
查看完整描述

2 回答

?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗 獲得超6個贊

解決方案

更換'-'用'+'和'_'用'/'如下行


byte[] decoded = Base64.getDecoder().decode(encoded.replace('-', '+').replace('_', '/'));

基本原理

有Base64編碼和Base64url編碼。除了上面指出的兩個字符替換之外,它們完全相同。


查看RFC 4648中的表 1 和表 2 :


                Table 1: The Base 64 Alphabet


 Value Encoding  Value Encoding  Value Encoding  Value Encoding

     0 A            17 R            34 i            51 z

     1 B            18 S            35 j            52 0

     2 C            19 T            36 k            53 1

     3 D            20 U            37 l            54 2

     4 E            21 V            38 m            55 3

     5 F            22 W            39 n            56 4

     6 G            23 X            40 o            57 5

     7 H            24 Y            41 p            58 6

     8 I            25 Z            42 q            59 7

     9 J            26 a            43 r            60 8

    10 K            27 b            44 s            61 9

    11 L            28 c            45 t            62 +

    12 M            29 d            46 u            63 /

    13 N            30 e            47 v

    14 O            31 f            48 w         (pad) =

    15 P            32 g            49 x

    16 Q            33 h            50 y


[...]


                Table 2: The "URL and Filename safe" Base 64 Alphabet


 Value Encoding  Value Encoding  Value Encoding  Value Encoding

     0 A            17 R            34 i            51 z

     1 B            18 S            35 j            52 0

     2 C            19 T            36 k            53 1

     3 D            20 U            37 l            54 2

     4 E            21 V            38 m            55 3

     5 F            22 W            39 n            56 4

     6 G            23 X            40 o            57 5

     7 H            24 Y            41 p            58 6

     8 I            25 Z            42 q            59 7

     9 J            26 a            43 r            60 8

    10 K            27 b            44 s            61 9

    11 L            28 c            45 t            62 - (minus)

    12 M            29 d            46 u            63 _

    13 N            30 e            47 v           (underline)

    14 O            31 f            48 w

    15 P            32 g            49 x

    16 Q            33 h            50 y         (pad) =

這是RFC的另一個引用:


這種編碼可以稱為“base64url”。這種編碼不應(yīng)被視為與“base64”編碼相同,不應(yīng)僅稱為“base64”。除非另有說明,“base64”指的是上一節(jié)中的 base64。這種編碼在技術(shù)上與前一種編碼相同,除了 62:nd 和 63:rd 字母字符,如表 2 所示。


查看完整回答
反對 回復(fù) 2021-10-27
?
慕田峪4524236

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊

根據(jù)RFC 2045,表 1:Base64 字母既不是字母表的一部分,-也不_是字母表的一部分。Base64解碼器只使用字母表中存在的字符,您不能只解碼任意字符。


                Table 1: The Base64 Alphabet


 Value Encoding  Value Encoding  Value Encoding  Value Encoding

     0 A            17 R            34 i            51 z

     1 B            18 S            35 j            52 0

     2 C            19 T            36 k            53 1

     3 D            20 U            37 l            54 2

     4 E            21 V            38 m            55 3

     5 F            22 W            39 n            56 4

     6 G            23 X            40 o            57 5

     7 H            24 Y            41 p            58 6

     8 I            25 Z            42 q            59 7

     9 J            26 a            43 r            60 8

    10 K            27 b            44 s            61 9

    11 L            28 c            45 t            62 +

    12 M            29 d            46 u            63 /

    13 N            30 e            47 v

    14 O            31 f            48 w         (pad) =

    15 P            32 g            49 x

    16 Q            33 h            50 y

正如 Roland Illig 指出的那樣,您可能正在處理 URL 友好的 Base 64 變體,其中_replaces+和-replaces /。在這種情況下,在解碼之前恢復(fù)更改可能就足夠了:


String raw = new String(res.getBytes("s_id"));

String encoded = raw.replace("_", "+").replace("-", "/");

String decoded = Base64.getDecoder().decode(encoded);

然而,如果沒有看到服務(wù)器端編碼代碼,就無法知道數(shù)據(jù)實際上是如何編碼的。


查看完整回答
反對 回復(fù) 2021-10-27
  • 2 回答
  • 0 關(guān)注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號