Задать вопрос
@kedavr13

Хэш sha1 разный в зависимости от того в каких кавычках строка?

Есть вот такой кусок кода
$data = addcslashes(json_encode($args, JSON_THROW_ON_ERROR), '"');
        return hash("sha1", $data . $this->secretKey);

$secret_key = '9fff8c602b08b00323567be0001480f6'
$data = "{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}"

если заменить $data строкой, то есть вот так
return hash("sha1", "{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}" . $this->secretKey);


То при разных кавычках то есть:
"{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}"

и
'{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}'

получается разный результат.
Собственно у меня при вот таком коде получается не тот результат который нужен
return hash("sha1", $data . $this->secretKey);
Как решить такое не понимаю...
ВАЖНОЕ УТОЧНЕНИЕ:
У меня нет строки с какими либо кавычками, просто результат выполнения кода
$data = addcslashes(json_encode($args, JSON_THROW_ON_ERROR), '"');
        return hash("sha1", $data . $this->secretKey);

равен
return hash("sha1", '{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}' . $this->secretKey);

И не равен
return hash("sha1", "{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}" . $this->secretKey);

И как сделать так чтобы результат выполнения был равен второму не понятно.
  • Вопрос задан
  • 112 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
А зачем вам экранирование \" внутри одиночных кавычек '?
Строка:
"{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}"

аналогична строке:
'{"order_id": "FACTPRECHR152632", "amount": "8300.00"}'

Могли бы хотя бы stlen()-ом это выяснить.

Да даже банальный
if ("{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}" != '{\"order_id\": \"FACTPRECHR152632\", \"amount\": \"8300.00\"}') die("ERROR!!!");

даст ясность.
Ответ написан
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
В приципе, в комментариях уже всё разжевали, но на всякий случай
Выполняем простой код
var_dump("{\"order_id\":\"FACTPRECHR152632\",\"amount\":\"8300.00\"}");
var_dump('{\"order_id\":\"FACTPRECHR152632\",\"amount\":\"8300.00\"}');

и смотрим на результат

после этого выполняем ещё один простой код
$json = json_encode(["order_id"=>"FACTPRECHR152632", "amount"=> "8300.00"]);
var_dump($json);
var_dump(addcslashes($json, '"'));

смотрим на результат
сравниваем его с предыдущим

И после этого идем с вопросами к тому, кто придумал написать здесь addcslashes
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы