我有一个这样的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中是什么意思?
1条答案
按热度按时间knpiaxh11#
也许您应该仔细检查Base64数据的编码。Base64数据可以按照RFC 4648和RFC 2045中定义的不同格式进行编码。Java对三种不同类型的编码有不同的实现,如
java.util.Base64
JavaDoc中所述,基本编码、MIME编码和URL安全编码。从几个实验来看,您的代码看起来是MIME格式的,所以下面的代码应该可以用:我试图在本地运行它,但现在问题转移到了生成私钥上,因此您正在生成的密钥与预期的格式之间可能存在一些不匹配。也许它不是有效的PKCS#8?