将PHP生成MD5哈希的代码转换为Python实现
实现PHP
get_md5_hash 函数的Python版本 先看一下原PHP的实现逻辑,它的核心是将时间字符串转成时间戳,对指定的授权窗口时长取模,拼接盐值后生成MD5哈希:
<?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代码,同时整合你已经写了一部分的时间处理逻辑:
import datetime import hashlib def get_md5_hash(str_datetime, str_auth_window, str_salt): # 解析时间字符串并转成整数时间戳(对应PHP的strtotime) try: # 兼容示例中带时区的时间格式,比如"2013-04-29T20:51:29GMT+0300" dt = datetime.datetime.strptime(str_datetime, "%Y-%m-%dT%H:%M:%SGMT%z") except ValueError: # 兼容你代码片段里不带时区的时间格式 dt = datetime.datetime.strptime(str_datetime, "%Y-%m-%dT%H:%M:%S") int_timestamp = int(dt.timestamp()) # 对授权窗口时长取模 auth_window = int(str_auth_window) mod_result = int_timestamp % auth_window # 拼接模结果与盐值,生成MD5哈希 hash_raw = str(mod_result) + str_salt md5_hash = hashlib.md5(hash_raw.encode('utf-8')).hexdigest() return md5_hash # 用你提供的时间处理逻辑进行测试 if __name__ == "__main__": # 当前时间减去6小时 timestamp = datetime.datetime.now() - datetime.timedelta(hours=6) timestamp_str = '{:%Y-%m-%dT%H:%M:%S}'.format(timestamp) salt = "454243" # 示例授权窗口时长设为一周(604800秒) auth_window = "604800" final_hash = get_md5_hash(timestamp_str, auth_window, salt) print(final_hash)
关键逻辑对应说明:
- PHP的
strtotime():Python通过datetime.strptime解析时间字符串,再转成整数时间戳,和PHP返回值格式对齐 - 取模运算
%:语法和PHP完全一致,直接复用逻辑 - PHP的
md5():Python用hashlib.md5实现,需要先将字符串转成字节流(encode('utf-8')),再通过hexdigest()返回十六进制哈希字符串
内容的提问来源于stack exchange,提问作者Alex Winkler
相关产品推荐
相关产品推荐

