Javascript 刮取需要md5哈希作为参数的网页

Javascript 刮取需要md5哈希作为参数的网页,javascript,c#,md5,Javascript,C#,Md5,我试图在c#控制台应用程序中从以下链接中获取数据: 使用chrome中的开发人员工具,我可以看到获得json响应是可能的,获取此响应的url是: 该网站使用这个js文件()生成expires和md5散列密钥。我想我已经知道expires值是unix日期时间。我以前从未使用过javascript,因此很难弄清楚它们是如何构造md5的 生成这些代码的Javascript是: generateCryptedParams=function(url,clientIP) { var crypte

我试图在c#控制台应用程序中从以下链接中获取数据:

使用chrome中的开发人员工具,我可以看到获得json响应是可能的,获取此响应的url是:

该网站使用这个js文件()生成expires和md5散列密钥。我想我已经知道expires值是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);
    }
公共元组生成器加密(字符串url、字符串IP地址)
{
字符串cetId=“中欧标准时间”;
TimeZoneInfo cetZone=TimeZoneInfo.FindSystemTimeZoneById(cetId);
var CETDateTime=TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,cetZone);
//Int32 unixTimestamp=(Int32)(CETDateTime.Subtract(新日期时间(1970,1,1))).TotalSeconds;
Int32 unixtimestap=(Int32)(DateTime.UtcNow.AddMinutes(1).Subtract(newdatetime(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 MD5无特殊图表=替换特殊图表(MD5编码);
MD5无特殊图表=MD5无特殊图表。子字符串(0,22);
返回新元组(MD5不带特殊图表,unixTimestamp);
}

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

只要花钱请人为您对代码进行反向工程(从法律的角度来看,这样的工作通常是灰色地带,但是)。。。我不知道你为什么这么期待为你做这件事。如果你有一些更具体的问题-请编辑你的帖子来澄清。为什么你想知道他们是如何构造MD5哈希的??你用什么代码刮网页?显示需要MD5哈希的代码?通常,MD5哈希是针对网页内容生成的,通常用于验证网页\任何文档的内容……在C中,您可以使用Cyrptography命名空间生成MD5哈希。您是否能够提供用于生成MD5的确切JavaScript?@Elias您解决过这个问题吗?@EnergyNumbers是的,我解决了。如果我没记错的话,我无法匹配MD5散列的原因是因为它们在生成散列之前将一个数字连接到单位日期时间。如果你有同样的问题,我可以看看我的源代码。我应该把这个帖子改成“已回复”。