使用字符串输入快速解密128解密

时间:2015-11-26 12:01:02

标签: swift encryption cryptography aes nsdata

我正在使用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>")

感谢任何帮助。

1 个答案:

答案 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)