You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中Base64解码报错:Illegal base64 character 5c 求助

问题与解决:Base64私钥解码失败异常处理

问题描述

1. 待处理的Base64私钥(部分字符已移除)

MIIEpAIBAAKCAQEAtp/Uo28kOjROL50aajnpK25CJoVoic2bqqu6OS2baWWD9fT2
ESqq8mbFxYN3O7JXbs+74YpTdg1jSUALOz9zj/H2eCF71QYvoHmdoi0iiQuy3gS1
6YczVvBvinSwfEnO6Wi/Xx6AC8urdreUR0c+5cNNSqI9oyrwA4m/XrFwR6ptT9oy
yahrVJdjA2Wdf+O4/0lW+jrMw+s
Qptfu4QslKhDnRUFu4ALqm3nypD/ojGjFCEl5poiBMMztqIpE7f9t+IBY/zJbOBP
I+sHVgwH/pJbi0CqIiDNIEiXsLDERTldzvA4DQIDAQABAoIBAFu+IVlVLRLcUebT
eoCgxQUfZ7XoUSLhGnF7wZqV0bv51ngJ7k+jaqtJe9MEfzKLHic5zn24OsNUaGtU
9A94ibpnaFTjJU1XxTdNwSXGnNHSAbJNFYHSfLURJkec5Uga4Aobp//F17eVQnbq
NGA2Z1+PZFW4+VPt7xMn8O5GH0ywdFhj4PI+z+UT0j1ezebjzDM2FoKwjfvA0wHg
bZuyFjb0EBNsaW9y1quh2sSaHAFATYoTLG3ArM/Ue4Fr/Qom0/5N3uusifMdWEcA
w7/yiI9D7Q4XsqoZ9gqAhXOcWgJmjvsx66zqUbArw/HmqIy5/vQfoZV78ux2iyZP
O9n68AECgYEA6GP5Ns8Zfgm9Y7J5OxjgGwwQYZziKGysnYIe2N6y9jbjXdjsTtTH
JKeeM+eHL3Mq2yrYj9m3bACE/uNQ/4o+V+hvVQusN+bMpY5YGHm4KiGL0ieNYs3B
A6LLGni7itMY5SC9g7Rm5tlAvUmv38NTKcS47Wz1YKrnhId4x5eWPAECgYEAyS2J
B8/6+C3jowJWJoguLKWWeEF5sPe9IWTqWxoUuJRLaSoKTWl0VKPB60DZZEpbPh2n
uQlfaRnbt/YZBIeBqnrZzqiO5iTDDtw8zOa0B+DLv9OX9I4dzbQ+PtH/CRH6cDst
hrMUUqW5K56za+gH8iiyvBAxjJG11QctUdIh0GZdgdhkW2YFYO
ClWYyCaqhfWOeJOjtQNgBGleXRF/4EJRNJP8wTuXVK+Vnrynq6dk2tyb77TyLRTZ
F5ZsrQKBgQCaNIpP1tGYpYTfFny5xQ8aY5e6Bd3/aC5Ays8wYb8oAPYwH9AeqWY2
sistzq9ARRbvwXzl45HzRKYoWVd1D0D5yOwxFOW++VD3luXH1UpEB1bvxHrpIwbD
gg9jhO9K1yri6JGA5ENx5InrvKsqodP/llszVJysBlUeAcwMo2gjNA==

2. 用于转换的Scala代码

def convertToBase64(privateKeyB64: String) = {
    val bytesArray = java.util.Base64.getDecoder.decode(privateKeyB64.replaceAll("\\r\\n|\\r|\\n", ""))
    import java.security.KeyFactory
    import java.security.spec.PKCS8EncodedKeySpec
    val spec = new PKCS8EncodedKeySpec(bytesArray)
    // create key from spec
    val keyFactory = KeyFactory.getInstance("RSA")
    keyFactory.generatePrivate(spec)
}

3. 执行时抛出的异常

Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 5c

用户疑问:不清楚该错误的具体含义,想了解Base64中的5c指代什么,以及如何解决该问题。


问题解答

1. 5c的具体含义

5c是字符的十六进制ASCII码值,对应的实际字符是反斜杠\。

Base64编码的合法字符范围是固定的:A-Z、a-z、0-9、+、/,以及用于补位的=。反斜杠不在这个范围内,所以当解码器遇到它时,就会抛出"非法Base64字符"的异常。

2. 解决方法

(1)修改字符串清理逻辑

你的代码已经处理了换行符,但没处理可能存在的反斜杠。需要在移除换行的同时,额外移除反斜杠:

def convertToBase64(privateKeyB64: String) = {
    // 移除换行符和反斜杠
    val cleanedKey = privateKeyB64.replaceAll("\\r\\n|\\r|\\n|\\\\", "")
    val bytesArray = java.util.Base64.getDecoder.decode(cleanedKey)
    import java.security.KeyFactory
    import java.security.spec.PKCS8EncodedKeySpec
    val spec = new PKCS8EncodedKeySpec(bytesArray)
    val keyFactory = KeyFactory.getInstance("RSA")
    keyFactory.generatePrivate(spec)
}

(2)检查私钥来源

出现反斜杠通常是因为私钥被错误转义了:

  • 比如从JSON字符串复制时,原始的/被转义成了\/,导致多出反斜杠
  • 或者在代码中定义字符串时,错误地添加了转义符

建议确认私钥的原始来源,确保拿到的是标准的PKCS#8格式Base64编码,没有多余的非合法字符。


内容的提问来源于stack exchange,提问作者Shivam Sahil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:35:26