解密(SWIFT)

问题描述:

这里进行加密使用Base64编码字符串 - >解密(SWIFT)

(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 

然后我的代码返回解密的字符串。 这是什么问题? 可以任何一个请

+2

'('和')'无效Base64字符 – Hamish

+1

也不需要使用'NSData'的初始化程序,因为之后您只需转换为'Data' - 只需使用'Data'的初始化程序。如果你不打算通过任何选项,你也不需要包含'options:'参数。你也可以在'String'的初始化程序中说'encoding:.utf8'。 – Hamish

+3

有效的base64字符串中的字符数需要是4的倍数,但是您的第一个字符串(带去除括号的括号)有165个字符,这就是为什么'NSData.init(base64Encoded:options:)'无法解码它。参见[RFC-4648](https://tools.ietf.org/html/rfc4648)。 – OOPer

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

实施例:

删除最后的字符来创建有效的长度。

首先将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编码字符串是不完整的,已被截断。

+0

谢谢Zaph。我得到了我的答案。 –