PHP MD5 объекта массива не соответствует MD5 в Swift - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь проверить данные, отправленные по 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, но не с объектом массива.

Что я делаю не так?

...