从Base64格式(Swift)解密

从Base64格式(Swift)解密,swift,base64,Swift,Base64,下面是使用Base64-> (ew0KICAiTmV3c0dyYXBoIjogWw0KICAgIHsNCiAgICAgICJEYXRlIjogIjA0LUZlYiIsDQogICAgICAiTmV3c1Njb3JlIjogNTAuMCwNCiAgICAgICJUYWJsZU5hbWUiOiAiTmV3c0dyYXBoIg0KICAgIH0sDQogICAge) 下面是解密字符串的扩展方法 extension String { func fromBase64() -> String

下面是使用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) ?? ""
    }
}
“我的文本”视图中没有输出,但您将在->

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

ew0KICAiTmV3c0dyYXBoIjogWw0KICAgIHsNCiAgICAgICJEYXRlIjogIjA0LUZlYiIsDQogICAgICAiTmV3c1Njb3JlIjogNTAuMCwNCiAgICAgICJUYWJsZU5hbWUiOiAiTmV3c0dyYXBoIg0KICAgIH0sDQog
然后我的代码返回解密的字符串。 问题是什么? 有谁能帮忙吗

  • Base64不是加密,它是一种编码
  • 长度不正确忽略括号,Base64编码必须是4个字符的倍数
  • 例如:

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

    首先将Base64字符串解码为数据,然后编码为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" }, { “新闻图表”:[ { “日期”:“2月4日”, “新闻分数”:50.0, “TableName”:“新闻图表” },
    问题中的Base64字符串似乎不完整,已被截断。

    不是有效的Base64字符,因此没有必要使用
    NSData
    的初始化器,因为您只是在之后转换到
    数据
    ,只需使用
    数据
    的初始化器即可。如果您不想传递任何选项,也不需要包含
    选项:
    参数。您也可以只说
    encoding:
    String
    的初始化器中的utf8
    。有效的base64字符串中的字符数必须是4的倍数,但第一个字符串(去掉括号)有165个字符,这就是为什么
    NSData.init(base64编码:选项:)
    无法解码。请参阅。第一个是->而不是它的解密方式。第二个是->我有太长的加密字符串(上面只是原始Api调用的一行),因此如何处理它1。Base64不是加密,而是编码。2.忽略括号,长度不正确。谢谢Zaph。我得到了答案。