【问题标题】:swift aes 128 decryption with string input带字符串输入的 swift aes 128 解密
【发布时间】:2016-04-29 02:55:41
【问题描述】:

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

感谢任何帮助。

【问题讨论】:

    标签: swift encryption cryptography aes nsdata


    【解决方案1】:

    您以错误的方式将 NSData 转换为字符串。按照此代码将 NSData 转换为字符串

    //This is your encrypted data
    var encryptedData = NSData()
    let plainData = encryptedData(data: encryptedData, encoding: NSUTF8StringEncoding)
    

    希望这对你有用。

    更新: 发生这种情况是因为您没有正确地从后端获取字符串。使用正确的方法来解码 json 数据,而不是仅仅打印它。 "&lt;bc6983a8 65d412df 2bafdc40 f569874e&gt;" 不是您实际需要的字符串。您需要解码您的 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)
    

    【讨论】:

    • 感谢您的回复,但我真正想做的是从来自服务器响应的字符串输入(例如 json)创建一个 NSData 对象,然后将 NSData 对象传递给解密方法。
    • 字符串"&lt;bc6983a8 65d412df 2bafdc40 f569874e&gt;"是来自服务器的加密json响应。这是我创建 NSData 对象所需的字符串,然后将 NSData 对象传递给解密方法。
    • "&lt;bc6983a8 65d412df 2bafdc40 f569874e&gt;" 是您在打印 NSData 对象时得到的东西。再次查看更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2020-11-13
    相关资源
    最近更新 更多