在模拟sohu用户登录过程中,密码是经过js加密后提交的,如何在项目中模拟加密后提交呢?

引用:http://www.cnblogs.com/cuihongyu3503319/archive/2008/08/28/1278573.html

经过反复测试,把sohu js加密的代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.JScript;
using System.Reflection;
using System.Windows.Forms;

namespace EAS.Class
{
    public class JScripta
    {
        private static readonly CodeDomProvider _provider = new Microsoft.JScript.JScriptCodeProvider();
        private static Type _evaluateType;
        private const string EVAL_SOURCE = @"package aa
{
public class JScript
{
    public static var hexcase=0;public static var chrsz=8;
    public static function  hex_md5(s){return  binl2hex(core_md5(str2binl(s),s.length*chrsz))}

public static function  core_md5(x,len){
    x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;
    var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;
    for(var i=0;i<x.length;i+=16)
      {
       var olda=a;var oldb=b;var oldc=c;var oldd=d;a=md5_ff(a,b,c,d,x[i+0],7,-680876936);
       d=md5_ff(d,a,b,c,x[i+1],12,-389564586);c=md5_ff(c,d,a,b,x[i+2],17,606105819);b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);
       a=md5_ff(a,b,c,d,x[i+4],7,-176418897);d=md5_ff(d,a,b,c,x[i+5],12,1200080426);c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);
       b=md5_ff(b,c,d,a,x[i+7],22,-45705983);a=md5_ff(a,b,c,d,x[i+8],7,1770035416);d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);
       c=md5_ff(c,d,a,b,x[i+10],17,-42063);b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);a=md5_ff(a,b,c,d,x[i+12],7,1804603682);
       d=md5_ff(d,a,b,c,x[i+13],12,-40341101);c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);b=md5_ff(b,c,d,a,x[i+15],22,1236535329);
       a=md5_gg(a,b,c,d,x[i+1],5,-165796510);d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);c=md5_gg(c,d,a,b,x[i+11],14,643717713);
       b=md5_gg(b,c,d,a,x[i+0],20,-373897302);a=md5_gg(a,b,c,d,x[i+5],5,-701558691);d=md5_gg(d,a,b,c,x[i+10],9,38016083);
       c=md5_gg(c,d,a,b,x[i+15],14,-660478335);b=md5_gg(b,c,d,a,x[i+4],20,-405537848);
       a=md5_gg(a,b,c,d,x[i+9],5,568446438);d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);c=md5_gg(c,d,a,b,x[i+3],14,-187363961);b=md5_gg(b,c,d,a,x[i+8],20,1163531501);a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);d=md5_gg(d,a,b,c,x[i+2],9,-51403784);c=md5_gg(c,d,a,b,x[i+7],14,1735328473);b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);a=md5_hh(a,b,c,d,x[i+5],4,-378558);
       d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);c=md5_hh(c,d,a,b,x[i+11],16,1839030562);b=md5_hh(b,c,d,a,x[i+14],23,-35309556);a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);d=md5_hh(d,a,b,c,x[i+4],11,1272893353);c=md5_hh(c,d,a,b,x[i+7],16,-155497632);b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);a=md5_hh(a,b,c,d,x[i+13],4,681279174);d=md5_hh(d,a,b,c,x[i+0],11,-358537222);c=md5_hh(c,d,a,b,x[i+3],16,-722521979);b=md5_hh(b,c,d,a,x[i+6],23,76029189);
       a=md5_hh(a,b,c,d,x[i+9],4,-640364487);d=md5_hh(d,a,b,c,x[i+12],11,-421815835);c=md5_hh(c,d,a,b,x[i+15],16,530742520);b=md5_hh(b,c,d,a,x[i+2],23,-995338651);a=md5_ii(a,b,c,d,x[i+0],6,-198630844);d=md5_ii(d,a,b,c,x[i+7],10,1126891415);c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);b=md5_ii(b,c,d,a,x[i+5],21,-57434055);a=md5_ii(a,b,c,d,x[i+12],6,1700485571);d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);c=md5_ii(c,d,a,b,x[i+10],15,-1051523);b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);a=md5_ii(a,b,c,d,x[i+8],6,1873313359);d=md5_ii(d,a,b,c,x[i+15],10,-30611744);c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);b=md5_ii(b,c,d,a,x[i+13],21,1309151649);a=md5_ii(a,b,c,d,x[i+4],6,-145523070);d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);c=md5_ii(c,d,a,b,x[i+2],15,718787259);b=md5_ii(b,c,d,a,x[i+9],21,-343485551);a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);
       d=safe_add(d,oldd)
      }
    return Array(a,b,c,d)
    }

public static function  md5_cmn(q,a,b,x,s,t){return safe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)}
    public static function  md5_ff(a,b,c,d,x,s,t){return md5_cmn((b&c)|((~b)&d),a,b,x,s,t)}
    public static function  md5_gg(a,b,c,d,x,s,t){return md5_cmn((b&d)|(c&(~d)),a,b,x,s,t)}
    public static function  md5_hh(a,b,c,d,x,s,t){return md5_cmn(b^c^d,a,b,x,s,t)}
    public static function  md5_ii(a,b,c,d,x,s,t){return md5_cmn(c^(b|(~d)),a,b,x,s,t)}
    public static function  safe_add(x,y){var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF)}
   
    public static function  bit_rol(num,cnt){return(num<<cnt)|(num>>>(32-cnt))}
 
    public static function  binl2hex(binarray)
    {
        var hex_tab='0123456789abcdef';
        var str='';
        for(var i=0;i<binarray.length*4;i++)
        {
            str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&0xF)+hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF);
        }
      return str;
    }

public static function  str2binl(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1

for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
return bin;
}

public static function  b64_423(str){var b64table=new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','-','_');var binary=new String();for(var i=0;i<str.length;i++){for(var j=0;j<64;j++){if(str.charAt(i)==b64table[j]){var bin=j.toString(2);binary+=('000000'+bin).substr(bin.length);break}}if(j==64){if(i==2){return binary.substr(0,8)}else{return binary.substr(0,16)}}}return binary}
    public static function  b2i(str){var x=0;var k=128;for(var i=0;i<8;i++,k=k/2){if(str.charAt(i)=='1'){x+=k}}return String.fromCharCode(x)}
    public static function  b64_decodex(str){var ret=new Array();var i;var x='';for(i=0;i<str.length;i+=4){x+=b64_423(str.substr(i,4))}for(i=0;i<x.length;i+=8){ret+=b2i(x.substr(i,8))}return ret}
    public static function  utf8to16(str){var out,i,j,len,c,c2,c3,c4,s;out=[];len=str.length;i=j=0;while(i<len){c=str.charCodeAt(i++);switch(c>>4){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:out[j++]=str.charAt(i-1);break;case 12:case 13:c2=str.charCodeAt(i++);out[j++]=String.fromCharCode(((c&0x1f)<<6)|(c2&0x3f));break;case 14:c2=str.charCodeAt(i++);c3=str.charCodeAt(i++);out[j++]=String.fromCharCode(((c&0x0f)<<12)|((c2&0x3f)<<6)|(c3&0x3f));break;case 15:switch(c&0xf){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:c2=str.charCodeAt(i++);c3=str.charCodeAt(i++);c4=str.charCodeAt(i++);s=((c&0x07)<<18)|((c2&0x3f)<<12)|((c3&0x3f)<<6)|(c4&0x3f)-0x10000;if(0<=s&&s<=0xfffff){out[j]=String.fromCharCode(((s>>>10)&0x03ff)|0xd800,(s&0x03ff)|0xdc00)}else{out[j]='?'}break;case 8:case 9:case 10:case 11:i+=4;out[j]='?';break;case 12:case 13:i+=5;out[j]='?';break}}j++}return out.join('')}

public static function  getStringLen(str){var cArr=str.match(/[^/x00-/xff]/ig);return str.length+(cArr==null?0:cArr.length)}
/**/
}
}";
        public static void JScriptUtil()
        {
            CompilerParameters parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            CompilerResults results = _provider.CompileAssemblyFromSource(parameters, EVAL_SOURCE);

Assembly assembly = results.CompiledAssembly;
            _evaluateType = assembly.GetType("aa.JScript");
            object[] w = new object[] { "troy1975" };

object ww = _evaluateType.InvokeMember("hex_md5", BindingFlags.InvokeMethod, null, null, w);
            //object ww = _evaluateType.InvokeMember("md5", BindingFlags.InvokeMethod,null, null, w);
            MessageBox.Show(ww.ToString());
        }

}

}

调用函数

//测试
            JScripta.JScriptUtil();        结果:f9edc840f963b286886fc9b3e85c7e55

与登陆时候提交的:http://passport.sohu.com/sso/login.jsp?userid=我的帐号@sohu.com&password=f9edc840f963b286886fc9b3e85c7e55&appid=1000&persistentcookie=0&s=1226823381765&b=1&w=1024&pwdty

pe=1

的password=后的字符串f9edc840f963b286886fc9b3e85c7e55一至,完成

C#执行js中的函数的问题,以sohu邮箱登陆密码js的MD5为例相关推荐

  1. JS OOP -02 深入认识JS中的函数

    深入认识JS中的函数: 1.概述,认识函数对象 2.函数对象和其他内部对象的关系 3.将函数作为参数传递 4.传递给函数的隐含参数:arguments 5.函数的apply,call方法和length ...

  2. java js中 function函数报错_浅析JS中对函数function的理解(基础篇)

    正文:我们知道,在js中,函数实际上是一个对象,每个函数都是Function类型的实例,并且都与其他引用类型一样具有属性和方法.因此,函数名实际上是指向函数对象的指针,不与某个函数绑定.在常见的两种定 ...

  3. JS中Promise函数then的奥秘探究

    JS中Promise函数then的奥秘探究 Promise概述 Promise对象是CommonJS工作组提出的一种规范,目的是为异步操作提供统一接口. 那么,什么是Promises? 首先,它是一个 ...

  4. 谈谈JS中的函数劫持

    说到劫持,第一反应可能是什么不好的东西.函数劫持并不邪恶,关键是看使用的人.虽然这个概念在前端领域使用较少,但是在安全领域.自定义业务等场景下还是有一定的使用价值的.所以,这一篇文章将会和大家一起去了 ...

  5. Js中匿名函数的理解

    目录 1.js中匿名函数的N种写法 最常见的用法: 2.JavaScript 匿名函数及闭包 2.1 匿名函数 2.1.1 函数的定义 2.1.2 匿名函数的创建 2.2 闭包 2.3 举例 2.4 ...

  6. JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype

    一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...

  7. JS中的函数声明和函数表达式

    JS中的函数声明和函数表达式 1. 函数声明定义一个具有指定参数的函数 函数声明提升, 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用 hoist ...

  8. js中trim函数_30天中的30个Excel函数:03 – TRIM

    js中trim函数 Yesterday, in the 30XL30D challenge, we took a poke at the lazy brother-in-law function -- ...

  9. Python中Print()函数的用法___实例详解(二)(全,例多)

    Python中Print()函数的用法___实例详解(二)(全,例多) 目录 十一.Print()小例子 十二.Print()中文输入显示乱码问题 十三.Print()写入文件 十四.print()在 ...

最新文章

  1. 乡下人最嘲笑城里人的16件事,无语了!
  2. Spring2.5的新特性
  3. VTK:可视化之TextureMapQuad
  4. 聊一聊Java中的文件锁
  5. Netty之自定义编码器MessageToMessageEncoder类
  6. 主席树 - 可持久化线段树
  7. 爬虫项目(四)---采集从01月22日以来全国各省疫情数据
  8. julia自然常数_Julia中的Sys.KERNEL常数
  9. J-LINK 操作使用指南
  10. 树莓派超声波车牌识别系统
  11. 国产5G手机先行!英特尔5G调制解调器芯片2020年才上市
  12. JavaScript 常用单词整理
  13. Spring Boot学习总结(20)——提升开发效率之热部署
  14. 一道充满歧义的思维题,全网唯一刁钻分析
  15. 音频放大电路_集成电路技术汇总:检测技巧
  16. python与excel-Python 与 Excel 不得不说的事
  17. 【算法学习】将MSRCR中的模糊处理由FFT修改为时域纯高斯模糊
  18. java 启动resin,Resin 启动时报错!解决方法
  19. 物流中心基建之:消防系统和暖通设计
  20. 大数据平台docker一键搭建

热门文章

  1. Oracle 19c升级路径与QA
  2. CCKS-2019-IPRE baseline sentence level 代码理解
  3. 使用微信小程序做一个简易的下拉框,无动画效果,纯原生写法(下拉列表框)
  4. Excel数据可视化竟可以如此惊艳!数据可视化大屏制作
  5. 【基于深度学习的细粒度分类笔记2】弱监督学习下商品识别:CVPR 2018细粒度识别挑战赛获胜方案简介
  6. 低通滤波器计算截止评率_科普文|一文了解电阻-电容(RC)低通滤波器
  7. MySQL数据库比较工具 - mysqldbcompare
  8. Shiro 入门笔记,整合SpringBoot,Redis
  9. 《SolidWorks 2014中文版机械设计从入门到精通》——2.2 草图命令
  10. Python 爬虫入门(二)——爬取妹子图