从 Base64 格式解密 (Swift)

Decrypt from Base64 format (Swift)

这是使用 Base64 加密的字符串 ->

(ew0KICAiTmV3c0dyYXBoIjogWw0KICAgIHsNCiAgICAgICJEYXRlIjogIjA0LUZlYiIsDQogICAgICAiTmV3c1Njb3JlIjogNTAuMCwNCiAgICAgICJUYWJsZU5hbWUiOiAiTmV3c0dyYXBoIg0KICAgIH0sDQogICAge)

这是解密字符串的扩展方法

extension String
{
    func fromBase64() -> String 
    {
        let data = NSData.init(base64Encoded: self, options: []) ?? NSData()
        return String(data: data as Data, encoding: String.Encoding.utf8) ?? ""
    }
}

我的文本视图中没有输出,但您将在 -> https://www.base64decode.org

上获得相同字符串的解密输出

但是如果我从加密字符串中取出子字符串 ->

ew0KICAiTmV3c0dyYXBoIjogWw0KICAgIHsNCiAgICAgICJEYXRlIjogIjA0LUZlYiIsDQogICAgICAiTmV3c1Njb3JlIjogNTAuMCwNCiAgICAgICJUYWJsZU5hbWUiOiAiTmV3c0dyYXBoIg0KICAgIH0sDQog

然后我的代码returns解密了字符串。 问题是什么? 任何人都可以吗

  1. Base64不是加密,是一种编码。
  2. 忽略括号,长度不正确,Base64 编码必须是 4 个字符的倍数。

示例:

正在删除最后一个字符以创建有效长度。

先将Base64字符串解码为Data,再编码为UTF-8字符串。

let base64 = "ew0KICAiTmV3c0dyYXBoIjogWw0KICAgIHsNCiAgICAgICJEYXRlIjogIjA0LUZlYiIsDQogICAgICAiTmV3c1Njb3JlIjogNTAuMCwNCiAgICAgICJUYWJsZU5hbWUiOiAiTmV3c0dyYXBoIg0KICAgIH0sDQogICAg"
let decodedData = Data(base64Encoded: base64)!
let decodedString = String(data: decodedData, encoding: .utf8)
print(decodedString!)

结果:

{
  "NewsGraph": [
    {
      "Date": "04-Feb",
      "NewsScore": 50.0,
      "TableName": "NewsGraph"
    },

看来问题中的Base64字符串不完整,被截断了。