【问题标题】:Need a PHP script to return an exact match of a python script需要一个 PHP 脚本来返回一个完全匹配的 python 脚本
【发布时间】:2011-09-29 17:39:56
【问题描述】:

请帮助我在 PHP 中获取此 python 脚本的确切 md5 值

Python 脚本

def md5code(params):
    params = {'identifier': ' ', 'amount': '0.0', 'code': 'UNIA'}
    req = dict([[key, params.get(key, '')] for key in ['code', 'identifier', 'amount']]) 
    secret = '2fd0bba6b1774ed391c1ff8467f52a5d'
    text = ":".join([req[x] for x in ['code', 'identifier', 'amount']] + secret)
    return md5(text).hexdigest().upper()

返回值为:5D316CD2311678A1B12F6152988F3097

PHP 脚本

$secret = '2fd0bba6b1774ed391c1ff8467f52a5d';
$code = 'UNIA';
$valid_institution = array('amount' => '0.0', 'code' => $code, 'identifier' => ' ');
foreach($valid_institution as $k => $v) {
    $text = implode(":", $v[$k] + $secret);
}
print strtoupper(hash("md5", $text)); 

返回值为:D41D8CD98F00B204E9800998ECF8427E

我希望 PHP 脚本返回一个准确的 md5 值,但事实并非如此。

任何建议将不胜感激。

谢谢

【问题讨论】:

  • @JonathanM 我已经编辑了这个问题。谢谢
  • @stereofrog 是的!输出没有区别。
  • 你试过把它包装在一个函数中吗?您是否尝试过实际处理您使用的参数的顺序?您是否真正验证过 python md5().hexdigest() 是否匹配 php 的 hash() 函数?你 .... ? .... ??????? - 代码显然有很多问题,看起来编写它的人实际上并不关心编码。你的问题听起来有点你想让别人完成工作。
  • 由于[ ... ] + secret而开始的Python代码无效
  • @hakre 这是一个继承的项目,我必须扩展现有的内容而不是更改它。我不认为这有什么问题。因此,将其标记为无用是模糊和粗鲁的。你不知道为什么需要它。那么为什么要通过一个有偏见和不必要的结论呢?

标签: php python md5


【解决方案1】:

好的,您似乎以错误的方式使用 foreach。试试这个:

$secret = '2fd0bba6b1774ed391c1ff8467f52a5d';
$code = 'UNIA';
$valid_institution = array('amount' => '0.0', 'code' => $code, 'identifier' => ' ');
$text = 
    $valid_institution['code'] . ":" . 
    $valid_institution['identifier'] . ":" . 
    $valid_institution['amount'] . ":" . 
    $secret;

print strtoupper(hash("md5", $text)); 

【讨论】:

  • 在不更改 Python 代码的情况下,这给出了准确的 Python md5 结果。谢谢。
【解决方案2】:

有效的 Python 代码可能如下所示:

from hashlib import md5
params = {'identifier': ' ', 'amount': '0.0', 'code': 'UNIA'}
req = dict([[key, params.get(key, '')] for key in ['code', 'identifier', 'amount']]) 
secret = '2fd0bba6b1774ed391c1ff8467f52a5d'
text = ":".join(req[x] for x in ['code', 'identifier', 'amount']) + secret
print md5(text).hexdigest().upper()

这是等效的 PHP

<?php
$secret = '2fd0bba6b1774ed391c1ff8467f52a5d';
$code = 'UNIA';
$valid_institution = array(
    'code' => $code, 
    'identifier' => ' ',
    'amount' => '0.0');

$text = implode(':', $valid_institution) . $secret;
print strtoupper(hash("md5", $text)); 
?>

【讨论】:

  • 非常感谢!不同的 PHP md5 结果,但在相等比较中给出了匹配。
【解决方案3】:
$secret = '2fd0bba6b1774ed391c1ff8467f52a5d';
$code = 'UNIA';
$valid_institution = array('amount' => '0.0', 'code' => $code, 'identifier' => ' ');
$text = implode(":", $valid_institution). $secret;
print strtoupper(hash("md5", $text)); 

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多