从Base64格式解密(Swift)

时间:2017-02-23 12:37:42

标签: swift base64

这是使用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

然后我的代码返回解密的字符串。 有什么问题? 请任何人

1 个答案:

答案 0 :(得分:1)

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

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

    首先将Base64字符串解码为Data,然后编码为aUTF-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字符串似乎不完整且已被截断。