从 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解密了字符串。
问题是什么?
任何人都可以吗
- Base64不是加密,是一种编码。
- 忽略括号,长度不正确,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字符串不完整,被截断了。
这是使用 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解密了字符串。 问题是什么? 任何人都可以吗
- Base64不是加密,是一种编码。
- 忽略括号,长度不正确,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字符串不完整,被截断了。