Scala-非法的Base64字符5c

0s0u357o  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(557)

我有一个这样的Base64字符串:

MIIEpAIBAAKCAQEAtp/Uo28kOjROL50aajnpK25CJoVoic2bqqu6OS2baWWD9fT2\nESqq8mbFxYN3O7JXbs+74YpTdg1jSUALOz9zj/H2eCF71QYvoHmdoi0iiQuy3gS1\n6YczVvBvinSwfEnO6Wi/Xx6AC8urdreUR0c+5cNNSqI9oyrwA4m/XrFwR6ptT9oy\nyahrVJdjA2Wdf+O4/0lW+jrMw+s\nQptfu4QslKhDnRUFu4ALqm3nypD/ojGjFCEl5poiBMMztqIpE7f9t+IBY/zJbOBP\nI+sHVgwH/pJbi0CqIiDNIEiXsLDERTldzvA4DQIDAQABAoIBAFu+IVlVLRLcUebT\neoCgxQUfZ7XoUSLhGnF7wZqV0bv51ngJ7k+jaqtJe9MEfzKLHic5zn24OsNUaGtU\n9A94ibpnaFTjJU1XxTdNwSXGnNHSAbJNFYHSfLURJkec5Uga4Aobp//F17eVQnbq\nNGA2Z1+PZFW4+VPt7xMn8O5GH0ywdFhj4PI+z+UT0j1ezebjzDM2FoKwjfvA0wHg\nbZuyFjb0EBNsaW9y1quh2sSaHAFATYoTLG3ArM/Ue4Fr/Qom0/5N3uusifMdWEcA\nw7/yiI9D7Q4XsqoZ9gqAhXOcWgJmjvsx66zqUbArw/HmqIy5/vQfoZV78ux2iyZP\nO9n68AECgYEA6GP5Ns8Zfgm9Y7J5OxjgGwwQYZziKGysnYIe2N6y9jbjXdjsTtTH\nJKeeM+eHL3Mq2yrYj9m3bACE/uNQ/4o+V+hvVQusN+bMpY5YGHm4KiGL0ieNYs3B\nA6LLGni7itMY5SC9g7Rm5tlAvUmv38NTKcS47Wz1YKrnhId4x5eWPAECgYEAyS2J\nB8/6+C3jowJWJoguLKWWeEF5sPe9IWTqWxoUuJRLaSoKTWl0VKPB60DZZEpbPh2n\nuQlfaRnbt/YZBIeBqnrZzqiO5iTDDtw8zOa0B+DLv9OX9I4dzbQ+PtH/CRH6cDst\nhrMUUqW5K56za+gH8iiyvBAxjJG11QctUdIh0GZdgdhkW2YFYO\nClWYyCaqhfWOeJOjtQNgBGleXRF/4EJRNJP8wTuXVK+Vnrynq6dk2tyb77TyLRTZ\nF5ZsrQKBgQCaNIpP1tGYpYTfFny5xQ8aY5e6Bd3/aC5Ays8wYb8oAPYwH9AeqWY2\nsistzq9ARRbvwXzl45HzRKYoWVd1D0D5yOwxFOW++VD3luXH1UpEB1bvxHrpIwbD\ngg9jhO9K1yri6JGA5ENx5InrvKsqodP/llszVJysBlUeAcwMo2gjNA==

请注意,上面的字符串是私钥,因此一些字符已被故意删除。
我正在尝试将其转换为字节:

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 form spec
    val keyFactory = KeyFactory.getInstance("RSA")
    keyFactory.generatePrivate(spec)

  }

以上代码在以下步骤失败:val bytesArray = java.util.Base64.getDecoder.decode(privateKeyB64.replaceAll("\\r\\n|\\r|\\n", "")),并显示错误:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 5c
我不确定它到底在抱怨什么?5c在Base64中是什么意思?

knpiaxh1

knpiaxh11#

也许您应该仔细检查Base64数据的编码。Base64数据可以按照RFC 4648RFC 2045中定义的不同格式进行编码。Java对三种不同类型的编码有不同的实现,如java.util.Base64 JavaDoc中所述,基本编码、MIME编码和URL安全编码。从几个实验来看,您的代码看起来是MIME格式的,所以下面的代码应该可以用:

def convertToBase64(privateKeyB64: String) = {
  val bytesArray = java.util.Base64.getMimeDecoder.decode(privateKeyB64)
  val spec = new java.security.spec.PKCS8EncodedKeySpec(bytesArray)
  java.security.KeyFactory.getInstance("RSA").generatePrivate(spec)
}

我试图在本地运行它,但现在问题转移到了生成私钥上,因此您正在生成的密钥与预期的格式之间可能存在一些不匹配。也许它不是有效的PKCS#8?

相关问题