我有一個這樣的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
我不確定它到底在抱怨什么?base64 中的含義是什么5c?
uj5u.com熱心網友回復:
也許您應該仔細檢查 Base64 資料的編碼。Base64 資料可以采用RFC 4648和RFC 2045中定義的不同格式進行編碼。java.util.Base64Java 對JavaDoc、Basic、MIME 和 URL-safe中記錄的三種不同型別的編碼有不同的實作。從幾個實驗來看,您的實驗似乎是 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?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/520541.html
標籤:爪哇斯卡拉base64
下一篇:不同結構的嵌套地圖
