Base64 Illegal base64 character 5f, Illegal base64 character 2d and java.util.Base64 报错解决

本文详细解析了AES加密过程中使用Base64.getUrlDecoder()进行解码时遇到的特殊字符处理问题,特别是如何正确处理-和_字符,避免解密时出现Illegal base64 character错误。
部署运行你感兴趣的模型镜像

最近写了个aes加解密 加密是没有多大问题,但是问题就是在于解密,

可能大家的报错情况都不太一样,我这里的报错原因是因加密的时候 我使用的是

Base64.getUrlDecoder().decode(sSrc)

这里注意一下用的是getUrlDecoder 导致返回密文

String originalString = new String(original, StandardCharsets.UTF_8);

含有 ”-“  和 ”_“ 这两种符号 

所以在解密的时候 获取Base64时也是需要使用和加密对应的方法:

Base64.getUrlDecoder().decode(sSrc)

不然会报错 出现标题上面的错误信息

Illegal base64 character 5f,

Illegal base64 character 2d 

具体原因应该是因为: getDecoder 会 "_" "-" 无效

Base64.getDecoder().decode(bytes)

解码具有无效Base64 '_'字符的字符串

临时的解决方法  具体原因还需要看下   如果有知道原因的可以留言分享下  谢谢!!!!

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

<think>好的,我现在要解决用户提出的关于JavaIllegalArgumentException: Illegal base64 character 2d的错误。首先,我需要理解这个错误的具体原因。用户提到的错误信息是“Illegal base64 character 2d”,其中“2d”是十六进制,对应的ASCII字符是减号“-”。因此,问题可能与Base64编码字符串中包含非法字符有关。 接下来,我应该回忆Base64编码的基本规则。标准的Base64编码使用的字符集包括A-Z、a-z、0-9、加号“+”和斜杠“/”,以及填充符“=”。如果编码后的字符串中包含减号“-”或者下划线“_”等非标准字符,可能会导致解码时出现错误。例如,某些Base64变种(如URL安全的Base64)会使用“-”和“_”来替代“+”和“/”,但Java的标准解码器可能不支持这些变种,除非明确指定。 然后,我需要考虑用户可能的场景。用户可能在尝试解码一个Base64字符串时遇到了问题,而这个字符串可能来自不同的编码方式,比如URL安全型或MIME类型。例如,如果字符串中包含“-”,而用户使用的是java.util.Base64.getDecoder(),这个解码器默认处理标准Base64,遇到非标准字符就会抛出异常。 接下来,我需要验证这种情况。可以编写一个示例代码,使用包含“-”的字符串进行解码,看看是否会重现错误。例如: String encodedStr = "ab-cd"; byte[] decodedBytes = Base64.getDecoder().decode(encodedStr); 运行这段代码应该会抛出用户提到的异常。这说明当字符串中有“-”时,标准解码器无法处理。 那么解决方案是什么呢?首先,应该检查输入的Base64字符串是否包含非法字符。可以通过替换非标准字符为标准字符来解决,比如将“-”替换为“+”,“_”替换为“/”。另外,Java提供了不同的解码器,比如Base64.getUrlDecoder(),用于处理URL安全的Base64编码,其中包含“-”和“_”。因此,用户可能需要根据编码的来源选择合适的解码器。 此外,用户可能在传输或存储过程中对Base64字符串进行了处理,比如添加了换行符或空格,这也可能导致解码错误。需要提醒用户检查字符串是否被意外修改,比如去空格或换行符。 最后,总结解决方案的步骤:检查输入字符串的合法性,替换非标准字符,选择正确的解码器,处理填充字符等。同时,提供示例代码帮助用户理解如何正确解码URL安全的Base64字符串,并建议使用工具类来清理输入字符串。</think>关于Java中出现`java.lang.IllegalArgumentException: Illegal base64 character 2d`错误的原因及解决方法如下: --- ### 错误原因 1. **非法Base64字符** `2d`是十六进制ASCII码,对应字符`-`(减号)。**标准Base64编码仅允许使用`A-Z`、`a-z`、`0-9`、`+`、`/`和填充符`=`**。如果字符串中包含`-`或其他非标准字符,解码时会触发此异常[^1][^2]。 2. **编码/解码方式不匹配** - **URL安全型Base64**:使用`-`代替`+`、`_`代替`/`(常见于URL或文件名场景)。 - **标准Base64**:要求严格使用`+`和`/`。 若使用`Base64.getDecoder()`解码URL安全型Base64字符串,会因字符不兼容报错。 3. **字符串被污染** 输入字符串可能包含空格、换行符或其他意外字符(如`%20`即空格),导致解码失败[^2]。 --- ### 解决方案 #### 方法1:替换非法字符 将URL安全型Base64字符转换为标准Base64格式: ```java String encodedStr = "ab-cd"; // 包含非法字符'-' encodedStr = encodedStr.replace('-', '+').replace('_', '/'); byte[] decodedBytes = Base64.getDecoder().decode(encodedStr); ``` #### 方法2:使用URL解码器 直接调用Java提供的URL安全型解码器: ```java String encodedStr = "ab-cd"; byte[] decodedBytes = Base64.getUrlDecoder().decode(encodedStr); ``` #### 方法3:清理输入字符串 移除所有非Base64字符(如空格、换行符): ```java String encodedStr = "ab-cd\n"; encodedStr = encodedStr.replaceAll("[^A-Za-z0-9+/=]", ""); byte[] decodedBytes = Base64.getDecoder().decode(encodedStr); ``` --- ### 验证步骤 1. **检查输入字符串** 打印或调试检查待解码字符串是否包含非法字符(如`-`、`_`、空格等)。 2. **选择匹配的解码器** - 标准编码:`Base64.getDecoder()` - URL安全编码:`Base64.getUrlDecoder()` 3. **异常处理** 使用`try-catch`捕获异常并提示用户输入合法性: ```java try { Base64.getDecoder().decode(encodedStr); } catch (IllegalArgumentException e) { System.out.println("输入包含非法Base64字符:" + e.getMessage()); } ``` --- ### 扩展问题 1. **如何区分标准Base64和URL安全型Base64?** 2. **Base64编码时如何避免填充符`=`的问题?** 3. **Base64编码在HTTP传输中的应用场景有哪些?** --- #### 引用说明 [^1]: 标准Base64字符集要求严格,非法字符会导致解码失败。 [^2]: 空格、换行符等干扰字符需提前清理以保障解码成功。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值