首页新闻找找看学习计划

新浪微博注册 C#

0
悬赏园豆:50 [待解决问题]

我在.net中模拟新浪所有注册时所发出的http请求,密码也是在本地用rsa的方式加密码之后post到地址:http://weibo.com/signup/v5/reg

加密代码如下:

RSASetPublic(pubkey, "10001");
string password = RSAEncrypt(psw);

pubkey 是通过请求  http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.11)&_=1392861001300    这个地址获取的

具体加密码方式是:http://pwg17.github.io/2012/12/16/weibo-qq-rsa-csharp/

但是post到http://weibo.com/signup/v5/reg之后一直报如下的错误:

我估计是rsa加密的问题,但是找不出问题出在哪里,头都大了好几圈儿了...哪位大神了解这块儿的,还请指点一二,多谢!

location.replace("?callback=parent.weiboRegController.feedBackUrlCallBack&code=100001&msg=注册失败error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0906D06C:PEM routines:PEM_read_bio:no start line
error:0407106B:rsa routines:RSA_padding_check_PKCS1_type_2:block type is not 02
error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed
&checktype=&href=&formresult=&validateExtra=");

小祁的主页 小祁 | 初学一级 | 园豆:152
提问于:2014-03-04 10:06
< >
分享
所有回答(2)
0

这个错误的意思是是指加密时随机填充的数据不正确。

Launcher | 园豆:44980 (高人七级) | 2014-03-04 10:23

哥们儿能说的详细一点么?我这种加密方式在做新浪微博登录的时候是没问题的

只不过调用的时候有点区别

strRSAPassword = login.RSAEncrypt(strPwd);//注册时用
strRSAPassword = login.RSAEncrypt(servertime + "\t" + nonce + "\n" + strPwd);//登录时用

我是通过看新浪微博的注册时的脚步找出的这个区别,其它的部分都一样,但现在这两种我都在注册的时候试过了.报的错误都一样...

难道新浪微博注册时的脚本里修改过rsa的加密方式?

支持(0) 反对(0) 小祁 | 园豆:152 (初学一级) | 2014-03-04 11:00

@小祁: 从它返回的错误看,应该是用的 openssl 的库来实现,采用了 RSA_padding_check_PKCS1_type_2 填充模式,而错误提示填充的数据不正确。我建议你再写个 RSADecrypt 方法来验证你的 RSAEncrypt 的输出是否正确。

支持(0) 反对(0) Launcher | 园豆:44980 (高人七级) | 2014-03-04 11:07

@Launcher: 好的多谢!我试试去

支持(0) 反对(0) 小祁 | 园豆:152 (初学一级) | 2014-03-04 11:51
0

error:0906D06C:PEM routines:PEM_read_bio:no start line

微博不是.NET开发的吧,你必须指明填充方式。

//
// 摘要:
// 使用 System.Security.Cryptography.RSA 算法对数据进行加密。
//
// 参数:
// rgb:
// 要加密的数据。
//
// fOAEP:
// 如果为 true,则使用 OAEP 填充(仅在运行 Microsoft Windows XP 或更高版本的计算机上可用)执行直接的 System.Security.Cryptography.RSA
// 加密;否则,如果为 false,则使用 PKCS#1 1.5 版填充。
//
// 返回结果:
// 已加密的数据。
//
// 异常:
// System.Security.Cryptography.CryptographicException:
// 无法获取加密服务提供程序 (CSP)。- 或 -rgb 参数的长度大于最大允许长度。- 或 -fOAEP 参数为 true,而且不支持 OAEP
// 填充。
//
// System.ArgumentNullException:
// rgb 为 null。
[SecuritySafeCritical]
public byte[] Encrypt(byte[] rgb, bool fOAEP);

 

元数据下有好几个方法,仔细查看下。

_劍客 | 园豆:94 (初学一级) | 2014-03-04 18:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册