1. // 新浪微博登录密码加密函数
  2. // password   密码明文
  3. // servertime 提交的参数之一
  4. // nonce      提交的参数之一
  5. // encode_password 输出的加密后的16进制字符串,40个字符
  6. // 返回 encode_password 的长度, 失败则返回0
  7. PASSENCODE_API int SinaSha1Encode(char *password, char *servertime, char *nonce, char *encode_password)
  8. {
  9. if (encode_password)
  10. {
  11. encode_password[0]=NULL;
  12. //定义要sha1的字符串
  13. char pTemp[400]={0};
  14. //定义返回的sha1值
  15. char szHash[41] ={0};
  16. strcpy(pTemp,password);
  17. SHA1((unsigned char*)pTemp, szHash, 41);
  18. strcpy(pTemp,szHash);
  19. SHA1((unsigned char*)pTemp, szHash, 41);
  20. strcpy(pTemp,szHash);
  21. if (servertime) strcat(pTemp,servertime);
  22. if (nonce) strcat(pTemp,nonce);
  23. SHA1((unsigned char*)pTemp, szHash, 41);
  24. strcpy(encode_password,szHash);
  25. return strlen(encode_password);
  26. }
  27. return 0;
  28. }
  29. //登陆伪代码
  30. //***********************************************
  31. ByteBuffer bytes;
  32. string url;
  33. string username="zhanghao@sina.com";
  34. string password="mima";
  35. string encode_password;
  36. url="http://login.sina.com.cn/sso/prelogin.php?&entry=sso&username=";
  37. url+=username;
  38. url+="&callback=parent.sinaSSOController.loginCallBack";
  39. BOOL bHtmlText;
  40. BOOL bUTF8;
  41. string retcode;
  42. string servertime;
  43. string nonce;
  44. if (GetUrlData(url.c_str(),bytes,NULL,0,bHtmlText,bUTF8) && bytes.getLength() && bHtmlText)
  45. {
  46. string str=bytes.c_str();
  47. string::size_type pos(0),posend(0);
  48. if( (pos=str.find("{",posend))!=string::npos && (posend=str.find("}", ++pos))!=string::npos )
  49. {
  50. string result=str.substr(pos,posend-pos);
  51. replace_all(result,"\"","");
  52. TRACE(result.c_str());
  53. vector<string> vars;
  54. Split(result,vars,",");
  55. if (vars.size())
  56. {
  57. for (int i=0;i<vars.size();i++)
  58. {
  59. vector<string> keys;
  60. Split(vars[i],keys,":");
  61. if (keys.size()==2)
  62. {
  63. if (keys[0]=="retcode")
  64. {
  65. retcode=keys[1];
  66. }else
  67. if (keys[0]=="servertime")
  68. {
  69. servertime=keys[1];
  70. }else
  71. if (keys[0]=="nonce")
  72. {
  73. nonce=keys[1];
  74. }else{
  75. TRACE("key:%s val:%s",keys[0].c_str(),keys[1].c_str());
  76. }
  77. }
  78. }
  79. }
  80. }
  81. }
  82. if (atoi(retcode.c_str())==0)
  83. {
  84. EncodePasword(password,servertime,nonce,encode_password);
  85. TRACE("servertime:%s",servertime.c_str());
  86. TRACE("nonce:%s",nonce.c_str());
  87. TRACE("encode_password:%s",encode_password.c_str());
  88. url="http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.12)";
  89. string post;
  90. /*
  91. service=miniblog&client=ssologin.js%28v1.3.12%29&entry=miniblog&encoding=utf-
  92. 8&gateway=1&savestate=7&from=&useticket=1&username=diyiwl@sina.com&servertime=1306503150&nonce=IN4GY9&pwencode=wsse&password=74dd6f5f82e027412b6da345909f0df450b5f410&url=http%
  93. 3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&returntype=META&ssosimplelogin=1
  94. */
  95. post="service=miniblog&client=ssologin.js%28v1.3.12%29&entry=miniblog&encoding=GB2312&gateway=1&savestate=7&from=&useticket=1&username=";
  96. post+=username;
  97. post+="&servertime=";
  98. post+=servertime;
  99. post+="&nonce=";
  100. post+=nonce;
  101. post+="&pwencode=wsse&password=";
  102. post+=encode_password;
  103. post+="&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&returntype=META&ssosimplelogin=1";
  104. TRACE(url.c_str());
  105. TRACE(post.c_str());
  106. if (GetUrlData(url.c_str(),bytes,post.c_str(),post.length(),bHtmlText,bUTF8) && bytes.getLength() && bHtmlText)
  107. {
  108. TRACE(bytes.c_str());
  109. }
  110. }
  111. //**********************************************
新浪网已经废弃了原来的那种简单的登录方法,可能是因为新浪微博。现在新浪使用的登录方法复杂程度不亚于腾讯。下面我们简单介绍新浪微博的登录 过程。     在登录之前我们需要先从新浪服务器获取两个变量:servertime,nonce。其中servertime中新浪的服务器时间,nonce是一 个随机生成的字符串。获取的需要通过这样一个网络接口:http://login.sina.com.cn/sso/prelogin.php?entry=miniblog&callback=sinaSSOController.preloginCallBack&user="+username+"&client=ssologin.js(v1.3.12)
其中username是你的用户名。
获取到我们需要的内容后,接下来就是加密的过程了。加密使用的是通用的SHA1加密算法:
  • 把密码进行一次SHA1加密,结果再进行一次SHA1加密
  • 把经过两次SHA1加密的结果附上servertime,nonce再进行一次SHA1加密
  • 加密的结果作为登录密码
登录地址没有变,仍使用:http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.12)

但参数要复杂一点了:
service:选择服务,我们这里使用的新浪微博:miniblog
client:ssologin.js%28v1.3.12%29
entry:miniblog
encoding:utf-8
gateway:1
savestate:0
useticket:1,这里使用到了登录票据。
username:你的用户名
servertime:上步得到的服务器时间
nonce:上步得到的随机字符串
pwencode:wsse(没整明白是个什么东西,不过从来不变)
password:加密后的密码
url:一个回调地址
returntype:META(使用中没有发生变化)
ssosimplelogin:1

example:
http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.12)&service:miniblog&client:ssologin.js%28v1.3.12%29&entry:miniblog&encoding:utf-
8&gateway:1&savestate:0&useticket:1&username: 用户 名&servertime:1308647606&nonce:L8QJHE&pwencode:wsse&password:f435c677294851d13794359145e6f96826c1

c3d2&url:http://www.baidu.com&returntype:META&ssosimplelogin:1

原文:http://www.cnblogs.com/goody9807/archive/2011/06/30/2094400.html

转载于:https://www.cnblogs.com/codemo/archive/2012/09/07/wsse.html

新浪微博登录密码加密函数 wsse加密算法说明相关推荐

  1. 新浪微博登录密码加密函数

    // 新浪微博登录密码加密函数 // password 密码明文 // servertime 提交的参数之一 // nonce 提交的参数之一 // encode_password 输出的加密后的16 ...

  2. 登录密码加密,RSA加密算法

    公钥加密,私钥解密 前端:密文RSA公钥加密,得到base64编码的加密密文,jsencrypt.min.js var publicKey = "MIGfMA0GCSqGSIb3DQEBAQ ...

  3. jemter-测试登录密码加密的情况

    jemter-测试登录密码加密的情况 废话不多说,直接上截图 1.先添加cookie管理器.请求头管理器.以及用户定义变量. 利用抓包工具fiddler,找到表头重要的信息,至于cookie管理器一样 ...

  4. crypt密码加密函数的基本用法

    定义函数 char * crypt (const char *key,const char * salt); 函数说明 crypt是个密码加密函数,它是基于Data Encryption Standa ...

  5. SpringBoot+2次MD5登录密码加密+MyBatisPlus+Thymeleaf+Bootstrap简单实现登录功能,一文轻松搞定!

    这里写目录标题 一.演示GIF 二.开发前期准备 1.数据库 2.依赖POM.XML 3.idea结构目录 三.后端 1.实体类 2.mapper接口 3.mapper.xml 4.Servicce接 ...

  6. php+$2y$10,PHP 用户密码加密函数password_hash

    PHP 用户密码加密函数password_hash PHP 用户密码加密函数password_hash 传统的用户名和密码都采用加盐的方式存储加密信息,盐值也需要存储. 自PHP5.5.0之后,新增加 ...

  7. Python_49模块及模块导入_OS模块_SYS模块_hashlib模块_用户登录密码加密验证的例子...

    一个py文件就可以是一个模块 Python导入模块名的查找:先去该文件目录下找   Pycharm 里面查找    安装包查找 import 自写模块的时候需要把模块的全部地址尽量写出写全 例如:模块 ...

  8. 关于登录密码加密的三个方式

    登录密码对于用户来说是最重要的数据,所以在存储的时候需要进行加密,防止在一些外部攻击下用户重要数据被别人获取了.对于登录密码加密,本人整理了三种简单的方式. 具体思路如下: 一.数据库加密 1.在后端 ...

  9. 常见登录密码加密方式

    目录 1 常见的加密方式 1.1.可逆加密算法 1.1.1. 对称加密 1.1.2. 非对称加密 1.2.不可逆加密算法 1.3.Base64编码 2 密码加密的方式选型 2.1 MD5密码加密 2. ...

最新文章

  1. Mysql HA实现MYSQL的高可用
  2. array_keys
  3. UA MATH636 信息论8 线性纠错码
  4. Java对存储过程的调用方法 --转载
  5. ArcMap中的名称冲突问题
  6. mysql dodba_doDBA
  7. 修改 MyEclipse 编辑区域背景颜色
  8. Powershell下设置环境变量
  9. docker容器部署的应用启动日志在哪里看_在SAP云平台上部署和运行Docker应用
  10. 使用C++生成条形码
  11. dubbo之failed to connect to server /xx.xx.xx.xx:20880 client-side timeout问题解决
  12. linux输入法图标不见了,桌面上右下角的输入法图标不见了 怎么找回?
  13. 江苏科技大学MATLAB考试,江苏科技大学精品课程申报表.DOC
  14. Slwave运行仿真时被终止,没有出现提示错误。
  15. 随手口袋记APP支持
  16. linux防火墙关闭与启动命令
  17. 【2018-11-09】中证500指数的估值详情
  18. Java学习-节点3
  19. Note For Linux By Jes(1)-Linux 的文件权限与目录配置
  20. linux usb3 转hdmi,USB TYPE-C转HDMI+PD3.0+USB3.0/USB3.1多功能扩展坞设计方法和设计电路...

热门文章

  1. Google Map API V3调用arcgis发布的瓦片地图服务
  2. sae上部署第一个站
  3. 如何设置SQL Server 全文搜索
  4. docker删除es数据_Docker的常用命令
  5. Linux 操作系统原理 — 网络 I/O 虚拟化
  6. C 语言编程 — 堆栈与内存管理
  7. 用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法
  8. 使用MLX90640自制红外热像仪(一):MLX90640介绍与API库移植
  9. Keil中调试时Watch窗口变量不实时显示
  10. 零基础学UI设计,哪些知识需要重点学习?