我正在使用zaph的示例进行this post
的加密和解密加密效果很好,使用我的加密密钥和iv,返回一个NSData对象,其中包含以下字符串:“bc6983a8 65d412df 2bafdc40 f569874e”,这是我加密的输入文本。返回的NSData对象的内容:
encrypted text: <bc6983a8 65d412df 2bafdc40 f569874e>
此文本发送到服务器(json),服务器返回响应,也使用相同的加密密钥和iv进行加密。
我的问题是,如何将来自服务器响应的字符串文本(例如bc6983a8 65d412df 2bafdc40 f569874e)转换为NSData对象,以便我可以解密它?
我尝试了以下内容:
let plainData = ("<bc6983a8 65d412df 2bafdc40 f569874e>" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!;
let plainData = ("<bc6983a8 65d412df 2bafdc40 f569874e>" as NSString).dataUsingEncoding(NSUTF8StringEncoding)!;
let base64String = plainData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0));
let dataDec = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))
但是在显示NSData对象的内容时,输出不是预期的输出:
data Optional("<3c626336 39383361 38203635 64343132 64662032 62616664 63343020 66353639 38373465 3e>")
感谢任何帮助。
答案 0 :(得分:0)
您正在以错误的方式将NSData转换为字符串。请遵循此代码将NSData转换为字符串
//This is your encrypted data
var encryptedData = NSData()
let plainData = encryptedData(data: encryptedData, encoding: NSUTF8StringEncoding)
希望这对你有用。
<强>更新强>
发生这种情况是因为您没有正确地从后端获取字符串。使用适当的方法解码json数据而不是仅打印它。 "<bc6983a8 65d412df 2bafdc40 f569874e>"
不是您实际需要的字符串。您需要解码您的json数据
参见示例代码
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil
{
print("error=\(error)", terminator: "")
return
}
do{ if let newdata = try? (NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary)
{
print(newdata)
}
此处'newdata'可能包含您需要的加密字符串。从json中解析它,将其转换为NSData然后解密。
更新2 使用此代码将数据转换为字符串
let resstr = NSString(data: YourData, encoding: NSUTF8StringEncoding)