基于PHP代码在Python中创建MD5哈希

时间:2018-03-27 18:12:37

标签: python md5

PHP中的代码我需要转到python

[md5 key] = md5( ( [Request Timestamp] % [Registration Window] ) . [salt] );

示例:

<?php
function get_md5_hash($strDatetime, $strAuthWindow, $strSalt) {
return md5((strtotime($strDatetime) % ((int)$strAuthWindow)) .$strSalt);
}
print get_md5_hash("2013-04-29T20:51:29GMT+0300", "604800", "155961");
?>

目前的Python代码

timestamp = datetime.datetime.now() - timedelta(hours=6)
timestamp_str = '{:%Y-%m-%dT%H:%M:%S}'.format(timestamp)

salt = "454243"
registration_window = "604800"

import hashlib

md5_key = hashlib.md5(((timestamp_str % registration_window) .salt).encode('utf-8')).hexdigest()

我无法通过此错误消息:

  

TypeError:并非在字符串格式化期间转换所有参数

3 个答案:

答案 0 :(得分:3)

您遇到的问题基本上归结为timestamp_strregistration_window为字符串。在Python中,格式化字符串的一种方法是使用%运算符。例如,

def sayGreeting(name):
    return "Hello %s" % name

字符串上的此运算符与您要使用的运算符不同,后者是计算两个整数的余数的模运算符。

PHP中的strtotime函数返回一个整数,它是日期和时间的字符串表示形式的Unix时间戳。要在Python中获得相同的结果,您还需要将时间戳转换为Unix时间戳整数。

使用.运算符完成PHP中字符串的连接。但是,在Python中,这是+运算符。这就是您需要将.salt更改为+ salt的原因,因为您将盐连接到Unix时间戳。

我写了一些代码来帮助你入门。

import datetime
import time
import hashlib

timestamp = datetime.datetime.now() - datetime.timedelta(hours=6)
unix_time = time.mktime(timestamp.timetuple())

salt = "454243"
registration_window = 604800

resulting_timestamp = str(unix_time % registration_window)

md5_digest = hashlib.md5(resulting_timestamp + salt).hexdigest()

请记住,永远不要将MD5用于任何需要考虑安全性的应用程序。它是安全散列函数。

答案 1 :(得分:1)

使用此

md5_digest = hashlib.md5((resulting_timestamp + salt).encode('utf-8')).hexdigest()

答案 2 :(得分:1)

因此,在尝试寻找解决方案的另外~2周后,我仍然没有生成所需的md5哈希的工作python代码。但是我确实有一个&#34; hack&#34;确实有效的解决方案,所以我已经发布了这个解决方案,如果找到python解决方案,我会更新。

我所做的是在PHP中运行forumla并将解决方案导入我的python代码。

utils.py

import subprocess

proc = subprocess.Popen("php md5.php", shell=True, stdout=subprocess.PIPE)
script_response = proc.stdout.read()

script_response1 = script_response.decode().split('|')[0]

md5.php

<?php

$strAuthWindow = 604800;
$strSalt = "454243";

function get_md5_hash($strDatetime, $strAuthWindow, $strSalt) {
return md5((strtotime($strDatetime) % ((int)$strAuthWindow))
.$strSalt);
}

print("$strDatetime");
print get_md5_hash("$strDatetime,", "$strAuthWindow", "$strSalt");

?>