do {
let JSONObject:[String:String] =
[
"username" : "username",
"password" : "Password",
"domain": "domain"
]
let my64data:NSData = NSData(base64EncodedString:Credentials.SecretKey, options: NSDataBase64DecodingOptions(rawValue: UInt(0)))!
let jsonData = try NSJSONSerialization.dataWithJSONObject(JSONObject, options: NSJSONWritingOptions.PrettyPrinted)
let myString = String(data: jsonData, encoding: NSUTF8StringEncoding)
// let jsonString = AES1.encrypt(myString!, secretKey: Credentials.SecretKey, options:["iv":my64data])
// print(" My Encrypted Json = \(jsonString)")
//
// let Decrypt = AES1.decrypt(jsonString, secretKey: Credentials.SecretKey, options: ["iv":my64data])
//print(" My Decrypted Json = \(Decrypt)")
let iv: Array<UInt8> = AES.randomIV(128/8)
let salt: Array<UInt8> = AES.randomIV(128/8)
let value = try! PKCS5.PBKDF2(password: Credentials.SecretKey.utf8.map({$0}), salt: salt, iterations: 1000, variant: .sha256).calculate()
value.toHexString()
_ = CryptoJS.mode.ECB()
_ = CryptoJS.pad.Iso97971()
_ = CryptoJS.pad.AnsiX923()
_ = CryptoJS.pad.Iso10126()
_ = CryptoJS.pad.ZeroPadding()
let encrypted : Array<UInt8>
encrypted = try AES(key: value, iv: iv, blockMode: .CBC, padding: PKCS7()).encrypt((myString?.utf8.map({$0}))!)
let decrypted = try AES(key: value, iv: iv, blockMode: .CBC, padding: PKCS7()).decrypt(encrypted)
// let jsonString = AES1.encrypt(myString!, secretKey: String(value), options:["iv":iv.toHexString(),"mode":CryptoJS.mode().ECB,"padding":CryptoJS.pad().ZeroPadding])
print(" My Encrypted Json = \(encrypted.toHexString())")
//
// let pkcs = PKCS7()
//
// let Decrypt = AES1.decrypt(jsonString, secretKey: String(value), options: ["iv":iv.toHexString(),"mode":CryptoJS.mode().ECB,"padding":pkcs])
print(" My Decrypted Json = \(decrypted.toHexString())")
let myInputIV : String = String(iv.toHexString())
let myInputSalt :String = String(salt.toHexString())
let finalJSONObject:[String:String] = [
"ciphertext" : "\(encrypted.toHexString())",
"iv" : "\(myInputIV)",
"salt": "\(myInputSalt)"
]
print("Final Json Object = \(finalJSONObject)")
let requestURL: NSURL = NSURL(string:"<myURL>")!
print(requestURL)
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
urlRequest.HTTPMethod = "POST"
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.HTTPBody = try!NSJSONSerialization.dataWithJSONObject(finalJSONObject, options:.PrettyPrinted)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest, completionHandler:{
data, response, error -> Void in
// Asynchronously call...
if (data != nil) {
print("Dataaa = \(data!)")
self.loginServiceResponse(data!)
}else{
Singleton.SharedInstance.myAlert(alertTitle:Constants.SERVER_ERROR_TITLE, alertMessage: Constants.SERVER_ERROR_MESSAGE, alertButtonTitle:Constants.OK)
self.activityIndicator.stopAnimating()
}
})
task.resume()
} catch {
print(error)
}
Я получил эту ошибку:CryptoSwift + CryptoJS делает неправильный JSON в Swift 2.3
Error with Json Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}
В почтальоне у меня есть ошибка заполнения – iPhone25
Лучше всего избегать использования CryptoSwift, кроме других вещей, это от 500 до 1000 раз медленнее, чем на основе Common Crypto. Common Crypto от Apple является сертифицированным FIPS и, как таковой, был хорошо проверен, использование CryptoSwift дает шанс на правильность и безопасность. – zaph
Увеличьте код с помощью [mcve], включите входы и выходы функции шифрования wityh. Сначала получите простое шифрование для работы, затем добавьте JSON, а затем добавьте связи. Постройте постепенно по рабочему коду, подход «большой удар» трудно отлаживать. – zaph