TA的每日心情 | 开心 2024-12-9 18:45 |
---|
签到天数: 124 天 [LV.7]常住居民III
|
欢迎您注册加入!这里有您将更精采!
您需要 登录 才可以下载或查看,没有账号?注册
x
在上一节里我们知道了QQ密码的加密方法了,是用三次MD5加密再结合验证码进行一次MD5加密而得的。我开始做时使用的是标准的MD5加密函数,这样子加密出来的密文和QQ网页上加密出来的不同,我想应该QQ里可能用的不是标准的MD5加密吧。于是乎问题出来了,怎么办呢?仿造他的加密函数自己写一个出来??这个方法我试了一个上午搞得我头都大了,所以放弃了。上网查了一下,原来C#里也可以调用到外部的js代码的哦。呵呵, 这下好了。只要把他的comm.js 调用进来不是就简单得多了嘛。
下面看我怎么调用的吧。
首先要拖一个webBrowser出来,我们要通过这个东西调用js里的函数,设置webBrowser的属性为隐藏就好了。这样不会挡着我们。
命名空间引用:-
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Net;
- using System.IO;
- using System.Security.Permissions;
- using System.Text.RegularExpressions;
- 初始化方法:
- System.IO.FileInfo file = new System.IO.FileInfo(@"E:\vg\vg\vg\js.htm");//注意文件的位置位置不同自己改啊,js.htm网页文件里调用了comm.js脚本文件
- // WebBrowser控件显示的网页路径
- webBrowser1.Url = new Uri(file.FullName);
- // 将当前类设置为可由脚本访问
- webBrowser1.ObjectForScripting = this;
- 调用方法:
- /// <summary>
- /// //得到加密后的密码密文
- /// </summary>
- /// <param name="pass">密码</param>
- /// <param name="aVerifyCode">验证码</param>
- /// <returns></returns>
- private string Preprocess(string pass, string aVerifyCode)
- {
- string strReturn = "";
- object[] objects = new object[1];
- object[] o = new object[] { pass };
- object dd = webBrowser1.Document.InvokeScript("md5_3", o);//调用comm.js里的md5_3这个函数,o是传入参数
- object[] b = new object[] { dd.ToString() + aVerifyCode.ToUpper() };
- strReturn = (webBrowser1.Document.InvokeScript("md5", b)).ToString(););//调用comm.js里的md5这个函数,b是传入的参数
- return strReturn;
- }
复制代码-
- ///////////////////////////js.html文件的内容///////////////////////////////////
- <html>
- <head>
- <SCRIPT language=javascript src="comm.js"> <!--注意你的js文件的位置哦-->
- </head>
- <body>d
- </body>
- </html>
- ////////////////////////////////////////////////////////////////////////////////////
复制代码 另外要提醒你的是:一定要在定义类之前加上这么一句: [System.Runtime.InteropServices.ComVisibleAttribute(true)]否则可能调用会失败。
下面是我的全部代码:-
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Net;
- using System.IO;
- using System.Security.Permissions;
- using System.Text.RegularExpressions;
- namespace WebSiteTest
- {
- [System.Runtime.InteropServices.ComVisibleAttribute(true)]
- public partial class Form1 : Form
- {
- /// <summary>
- /// 存储操作中的Cookie
- /// </summary>
- private CookieContainer cc = new CookieContainer();
- public Form1()
- {
- InitializeComponent();
- System.IO.FileInfo file = new System.IO.FileInfo(@"E:\vg\vg\vg\js.htm");//注意文件的位置啊
- // WebBrowser控件显示的网页路径
- webBrowser1.Url = new Uri(file.FullName);
- // 将当前类设置为可由脚本访问
- webBrowser1.ObjectForScripting = this;
- // 将当前类设置为可由脚本访问
- webBrowser1.ObjectForScripting = this;
- }
- /// <summary>
- /// //得到加密后的密码和验证码
- /// </summary>
- /// <param name="pass"></param>
- /// <param name="aVerifyCode"></param>
- /// <returns></returns>
- private string Preprocess(string pass, string aVerifyCode)
- {
- string strReturn = "";
- object[] objects = new object[1];
- object[] o = new object[] { pass };
- object dd = webBrowser1.Document.InvokeScript("md5_3", o);
- object[] b = new object[] { dd.ToString() + aVerifyCode.ToUpper() };
- strReturn = (webBrowser1.Document.InvokeScript("md5", b)).ToString();
- return strReturn;
- }
- }
- }
复制代码 |
|