You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:30:45