如何匹配sha256输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何匹配sha256输出相关的知识,希望对你有一定的参考价值。

我有一个设备使用编译的二进制文件来生成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)。

答案

你的shell代码有

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

而你的PHP有:

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

从shell代码中删除美元和到期日:

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

或者将它们添加到php:

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

以上是关于如何匹配sha256输出的主要内容,如果未能解决你的问题,请参考以下文章

使用 Crypto++ 生成 SHA256 哈希,使用字符串作为输入和输出?

如何增量计算上传到多个服务器实例的文件的“sha256”?

Bash sha256不匹配二郎一[重复]

PHP 和 Javascript sha256 值不匹配

如何学好hac函数与sha256算法

NodeJS Crypto RS-SHA256 和 JWT 承载