最近需要做一些关于RSA加密的算法问题,从服务器返回的公钥与一些参数值进行公钥加密已知 e 和 公钥 strPublic ;代码大致片段为:BIGNUM *bnn,*bne;int nRet = BN_hex2bn(&bnn,strPublic ); //公钥 已知公钥每次都相同unsigned long e = 0x10001;
nRet = BN_set_word(bne, e); //eRSA *pRsa = RSA_new();
pRsa->n = bnn;
pRsa->e = bne;
pRsa->d = NULL;flen = RSA_size(pRsa); // RSA密钥长度strTemp.Format(_T("%s\t%s\n%s"),strSvcTime,strNonce,_T("abcedf")); //strSvcTime 与 strNonce 是服务器返回的两个参数 并且这是服务器js的密码拼接方法strPwd = strTemp;nRet = RSA_public_encrypt(flen-11, pszPwd, encData, pRsa, RSA_PKCS1_PADDING); // pszPwd 为需要加密的源字符串, 采用PKCS1填充所以flen需要-11;可是这加密后的结果对服务器进行post后总是返回密码错误,如果使用服务器的js 进行加密则可通过验证以下为服务器的主要的加密过程 if ((me.loginType & rsa) && me.servertime && sinaSSOEncoder && sinaSSOEncoder.RSAKey) {
request["servertime"] = me.servertime;
request["nonce"] = me.nonce;
request["pwencode"] = "rsa2";
request["rsakv"] = me.rsakv;
var RSAKey = new sinaSSOEncoder.RSAKey();
RSAKey.setPublic(me.rsaPubkey, '10001'); //公钥 与 e参数
password = RSAKey.encrypt([me.servertime, me.nonce].join("\t") + "\n" + password);
} //这是js 的RSA加密过程
function RSAEncrypt(text) {
var m = pkcs1pad2(text,(this.n.bitLength()+7)>>3); //经验证这是标准的 pkcs1填充
if(m == null) return null;
var c = this.doPublic(m);
if(c == null) return null;
var h = c.toString(16);
if((h.length & 1) == 0) return h; else return "0" + h;
}
请问 这是什么原因导致 OPENSSL的 RSA 加密 通不过服务器验证的问题呢 ?
解决方案 »
- Tab stop切换问题 急
- win32编程wm_paint处下断的问题,急急急急急急!!!!!!
- link(directshow,filter开发)问题.
- CTreeCtrl的单击事件,我在此中为何得不到一个项目的TEXT文本??
- delete 对象指针时报错:Unhandle exception: 0xC0000005:Access Vialation. 不知道是否内存泄漏???
- 急!如何把.cpp文件转成.dll文件,在线等!
- 请问我的ATL Service型的组件在客户端调用时逆初始化后关闭窗口有内存不能为读错误,如果不逆初始化关闭就没错误
- 请问是否可以在表中存放文件?
- 紧急求助关于串口通讯
- 请问有什么办法能用listctrol控件去实现ultraedit里显示十六进制数据的功能吗?
- MFC常规Share Dll导出对话框问题
- vs2008 mfc MSChart 求高手指点!急
-------------------------------这种果断问自己的同事啊