swift aes 128解密带字符串输入

swift aes 128 decryption with string input

我正在使用来自

的 zaph 的加密和解密示例

加密效果很好,使用我的加密密钥和 iv,returns 一个 NSData 对象,包含以下字符串:"bc6983a8 65d412df 2bafdc40 f569874e",这是我加密的输入文本。返回的NSData对象内容:

encrypted text: <bc6983a8 65d412df 2bafdc40 f569874e>

此文本被发送到服务器 (json),服务器 returns 响应,也使用相同的加密密钥和 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>")

感谢任何帮助。

您以错误的方式将 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)