javascript - 抓取需要 md5 哈希作为参数的网页

标签 javascript c# md5

我正在尝试从以下链接中抓取数据,在 C# 控制台应用程序中: https://www.eex-transparency.com/homepage/power/germany/production/availability/non-usability

使用 chrome 中的开发者工具,我可以看到它可以得到一个 json 响应,得到它的 url 是: https://www.eex-transparency.com/dsp/tem-12?country=de&expires=1454345128&md5=TRhtJei_go4ueLeekBc8yw

该网站使用此 js 文件 ( https://www.eex-transparency.com/assets/js/tpe-website.js ) 生成过期和 md5 哈希键。我想我已经发现过期值是一个 unix 日期时间。我以前从未使用过 javascript,所以很难弄清楚它们是如何构造 md5 的。

生成这些代码的 Javascript 是:

generateCryptedParams=function(url,clientIP)
{
    var cryptedParams,md5,md5Encoded,md5WithoutSpeciaChars,parser,timePoint,urlPath;

return timePoint=moment().tz("Europe/Berlin").add(1,"minute").unix(),
                 parser=document.createElement("a"),
                 parser.href=url,
                 urlPath=parser.pathname,
                 "/"!==urlPath[0]&&(urlPath="/"+urlPath),
                 md5=CryptoJS.MD5(urlPath+timePoint+clientIP+" zYeHzBomGdgV"),
                 md5Encoded=md5.toString(CryptoJS.enc.Base64),
                 md5WithoutSpeciaChars=replaceSpecialChars(md5Encoded),
                 cryptedParams={"expires":timePoint,"md5":md5WithoutSpeciaChars}
}

replaceSpecialChars=function(str)
{
var key,specialChars,value;
specialChars={"=":"","\\+":"-","/":"_","%":"_"};
for(key in specialChars)
    value=specialChars[key],
     str=str.replace(new RegExp(key,"g"),value);

return str
}

正如我所说,我认为我对时间点部分感到满意​​,但 md5 让我感到困惑。下面是我复制他们的 C# 代码,但是当我传递 md5 哈希时,他们的站点返回 403 禁止错误。

    public Tuple<string, Int32> GenerateCrypto(string url, string ipAddress)
    {
        string cetId = "Central European Standard Time";
        TimeZoneInfo cetZone = TimeZoneInfo.FindSystemTimeZoneById(cetId);
        var CETDateTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, cetZone);
        //Int32 unixTimestamp = (Int32)(CETDateTime.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
        Int32 unixTimestamp = (Int32)(DateTime.UtcNow.AddMinutes(1).Subtract(new DateTime(1970, 1, 1))).TotalSeconds;


        url = url.Split('/')[3];
        var md5 = CipherUtility.GenerateMd5(url + unixTimestamp + ipAddress + " zYeHzBomGdgV");
        var md5Encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(md5));
        var md5withoutSpecialCharts = replaceSpecialChars(md5Encoded);
        md5withoutSpecialCharts = md5withoutSpecialCharts.Substring(0, 22);
        return new Tuple<string, Int32>(md5withoutSpecialCharts, unixTimestamp);
    }

最佳答案

解决方案是我需要在散列之前将一个 const 字符串连接到所有元素。

关于javascript - 抓取需要 md5 哈希作为参数的网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35136068/

相关文章:

php - 如何在 JavaScript 中创建服务器端进度指示器?

javascript - 悬停时更改 vue 框架中的多个元素数据

javascript - 为什么使用 Facebook 的 Graph API(通过 AJAX POST)上传的图片会获得 "Only Me"权限?

c# - 使用 Babel 将 C# 中的 JSX 转换为 JS

c# - 使用 c# 和 TLSv1.2 连接到 LDAP

c# - 从 C# 调用 Windows API 函数时,签名的哪个来源信任 : . NET Framework 源代码或 PInvoke?

MySQL ENCRYPT 字段转 MD5

javascript - 将名称与相应的 32 位无符号整数匹配

python - 在 BeautifulSoup 结果上使用 md5

java - Java和php5 MD5 Hash的区别