【问题标题】:Convert python code with sha to php将带有sha的python代码转换为php
【发布时间】:2017-01-01 17:22:37
【问题描述】:

在将 python 转换为 php 时遇到问题。我在 python 中有以下代码:

user = "DdrkmK5uFKmaaeNqfqReMADSUJ4sVSLrV2A8Bvs8"
passing = "K9hvwANSBW5tLYzuWptWMByTtzZZKHzm"

sha = hashlib.sha256()
sha.update(user)
sha.update(passing)
sha_A = [ord(x) for x in sha.digest()]

sha_A 是以下数组:

[231, 13, 239, 136, 20, 198, 76, 121, 67, 163, 251, 153, 114, 13, 65, 203, 41, 37, 64, 168, 43, 69, 81, 103、235、161、15、58、82、57、217、178]


我已经转成php了:

$user = "DdrkmK5uFKmaaeNqfqReMADSUJ4sVSLrV2A8Bvs8";
$passing = "K9hvwANSBW5tLYzuWptWMByTtzZZKHzm"

$sha = hash_init("sha256");
$sha = hash_update($sha, $user);
$sha = hash_update($sha, $passing);

$sha_A = [];
$i = 0;
$digest = openssl_digest($sha, "sha256");
$digest = str_split($digest);
foreach ($digest as $x) {
  $sha_A[$i] = ord($x);
  $i = $i + 1;
}

但返回的数组$sha 看起来像这样:

[101, 51, 98, 48, 99, 52, 52, 50, 57, 56, 102, 99, 49, 99, 49, 52, 57, 97, 102, 98, 102, 52, 99, 56、57、57、54、102、98、57、50、52]

也许你们中的一些人会发现我的错误?

【问题讨论】:

    标签: php python hash sha digest


    【解决方案1】:

    我在您的 PHP 代码中发现了一些错误。

    这是一个python sn-p:

    >>> sha = hashlib.sha256()
    >>> sha.update(user)
    >>> sha.update(passing)
    >>> sha_A = [ord(x) for x in sha.digest()]
    [135, 146, 107, 215, 70, 126, 179, 21, 19, 177, 191, 236, 182, 136, 192, 53, 148, 42, 160, 24, 63, 224, 170, 211, 32, 131, 59, 146, 60, 162, 77, 2]
    

    还有 PHP 版本,已更正:

    $ctx = hash_init('sha256');
    hash_update($ctx, $user);
    hash_update($ctx, $passing);
    $digest = hash_final($ctx, true);
    
    $sha_A = [];
    foreach (str_split($digest) as $x) {
        $sha_A[] = ord($x);
    }
    [135, 146, 107, 215, 70, 126, 179, 21, 19, 177, 191, 236, 182, 136, 192, 53, 148, 42, 160, 24, 63, 224, 170, 211, 32, 131, 59, 146, 60, 162, 77, 2]
    

    在您的 PHP 版本中,$sha = hash_update($sha, $user); 不好,因为hash_update 返回一个布尔值。第一个参数称为context,是hash_init 的结果,第二个参数是要散列的数据。最后,调用hash_final,将最后一个参数(raw_output) 调用到true,获取二进制数据。

    最后一个错误,在 SHA 结果上使用 openssl_digest 正在计算 SHA 摘要的摘要。有趣,不是吗? :)。

    【讨论】:

    • 谢谢。这对我有帮助:) 但是以下部分是什么: sha_A = [ord(x) for x in sha.digest()] 我转换正确了吗?
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多