как сопоставить вывод sha256 - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть устройство, использующее скомпилированный двоичный файл для генерации ключа sha256, который должен пройти проверку подлинности на сервере, использующем php (7.3), и с теми же данными полученные ключи отличаются, хотя они должны совпадать.

Двоичный файл совпадает с файлом .sh, размещенным здесь.

Чего мне не хватает?

Вот код .sh

#!/bin/sh

SEC="xyxyxyxyxyxyxyxyxyxyxyxyxyxyxy"
if [ -z $1 ]
then
    PROD=$(cat prod.txt)
else
    PROD=$1
    EXPIRE=$2
fi
SDATA="${PROD}\$${SEC}\$${EXPIRE}"
KEY=$(echo -n ${SDATA} | openssl sha256 -binary | base64)

echo "ABC TXYZ Gen"
echo "Code: ${PROD}"
[ ! -z "${EXPIRE}" ] && echo "Expire date : ${EXPIRE}"
echo "Activate code:"
echo ${KEY%%=} | tee activate.txt

А это php

public function generateActivate($params = [])
{
    if (!isset($params['Mod'])) {
        return false;
    }
    if (!isset($params['Prod'])) {
        return false;
    }
    if (!isset($params['Vers'])) {
        return false;
    }

    $sec="xyxyxyxyxyxyxyxyxyxyxyxyxyxyxy
    $data = $params['Prod'].$sec;
    $params['Activate'] = base64_encode(hash('sha256', $data, true));

К сожалению, я не могу запустить скомпилированный двоичный файл на сервере, так как он запрашивает версию glib2.28, недоступную на сервере (Centos 7).

1 Ответ

2 голосов
/ 02 мая 2019

Ваш код оболочки имеет

SDATA="${PROD}\$${SEC}\$${EXPIRE}"

, тогда как ваш php имеет:

$data = $params['Prod'].$sec;

Либо удалите доллары и срок действия из кода оболочки:

SDATA="${PROD}${SEC}"

или добавьте их в php:

$data = $params['Prod'] . '$' . $sec . '$' . $params['Expire'];
...