📄 gliu.cpp
字号:
//生成登录URL
#include "stdafx.h"
#include "GLIU.h"
#include "md5.h"
#include "StdString.h"
const char HTTP_LOGIN[]="http://edit.bjs.yahoo.com/config/login";
inline void rhex(unsigned int num, char *data);
CGLIU::CGLIU(const char * u , const char * p ,const char * c)
{
//初始化
ChallengeText[0]=0;
password[0]=0;
data[0]=0;
LogInUrl[0]=0;
user[0]=0;
strcpy(user,u);
strcpy(password,p);
strcpy(ChallengeText,c);
}
const char * CGLIU::GetLogInUrl()
{
//以下代码计算登录URL,来自于开源项目YPOPs!
//下面的MD5加密完全再现了雅虎中国网页上的加密过程
char hash[256];
MD5_CTX ctx;
MD5_Init(&ctx);
MD5_Update(&ctx, password, strlen(password));
MD5_Final(reinterpret_cast<unsigned char *>(hash), &ctx);
hash[0] = '\0';
rhex(ctx.A, data);
strcat(hash, data);
rhex(ctx.B, data);
strcat(hash, data);
rhex(ctx.C, data);
strcat(hash, data);
rhex(ctx.D, data);
strcat(hash, data);
strcat(hash, ChallengeText);
MD5_Init(&ctx);
MD5_Update(&ctx, hash, strlen(hash));
MD5_Final(reinterpret_cast<unsigned char *>(hash), &ctx);
hash[0] = '\0';
rhex(ctx.A, data);
strcat(hash, data);
rhex(ctx.B, data);
strcat(hash, data);
rhex(ctx.C, data);
strcat(hash, data);
rhex(ctx.D, data);
strcat(hash, data);
sprintf(data,
"%s?login=%s&passwd=%s&.save=1&.intl=cn&.src=ym&.challenge=%s&.hash=1&.js=1&.md5=1",
HTTP_LOGIN, user, hash, ChallengeText);
strcpy(LogInUrl,data);
return (const char *)LogInUrl;
}
inline void rhex(unsigned int num, char *data)
{
CStdString hex_chr = "0123456789abcdef";
CStdString str;
for(int j = 0; j <= 3; j++)
{
str += hex_chr[(num >> (j * 8 + 4)) & 0x0F];
str += hex_chr[(num >> (j * 8)) & 0x0F];
}
strcpy(data, str);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -