Я пытаюсь проверить данные, отправленные по net с использованием MD5 ha sh.
Это серверный код PHP, который подготавливает, кодирует и возвращает данные:
$sdata = array('action' => $action,
'client' => $client,
'mobile' => $mobile,
'orders' => []);
$sdata_md5 = md5(json_encode($sdata));
$response = array('sdata' => $sdata,
'sdata_md5' => $sdata_md5);
echo json_encode($response);
Это код SWIFT iOS, который принимает данные сервера и пытается вычислить MD5 га sh полученных данных:
do {
let session = URLSession.shared
let task = session.dataTask(with: request, completionHandler: {
data, response, error in
if error == nil {
if let _data = data {
if let dataArr = try JSONSerialization.jsonObject(with: _data) as? [String : Any] {
let sdata = dataArr["sdata"] as? [String : Any]
let sdata_md5 = dataArr["sdata_md5"] as? [String : Any]
let calc_md5 = sdata.description.md5
// calc_md5 != sdata_md5 ?
}
}
}
И это расширение SWIFT для MD5:
extension String {
var md5: String {
let data = Data(self.utf8)
let hash = data.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> [UInt8] in
var hash = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH))
CC_MD5(bytes.baseAddress, CC_LONG(data.count), &hash)
return hash
}
return hash.map { String(format: "%02x", $0) }.joined()
}
}
Если сервер отправляет одну простую строку, с которой совпадает MD5, но не с объектом массива.
Что я делаю не так?