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)
我正在使用来自
加密效果很好,使用我的加密密钥和 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)