紧急求助:用CMPP2.0协议发送MT信息,对于“AuthenticatorSource”字段,如何使用MD5 Hash函数进行加密。

xhyxyr 2003-10-24 09:54:31
MD5 Hash是由一系列函数组成,如何使用MD5才能正确填写“AuthenticatorSource”字段。
我使用的是这么一组函数:
MD5_Hash.MD5Init ();
MD5_Hash.MD5Update ();
MD5_Hash.MD5Final ();
但是不能通过验证,请高手救救急,指点一下迷津,谢谢!
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhyxyr 2003-11-03
  • 打赏
  • 举报
回复
假设有这样的企业代码:"920022",密码"ydzx",10位发送时间MMDDHHMMSS为:"1103104936"
我的程序经过MD5加密后,得到的16位无符号字符串分别是(以整数来表示):
68,140,172,42,2,193,0,66,216,100,187,85,113,145,94,233

不知道转换得对不对,请高手指教,谢谢!
xhyxyr 2003-10-31
  • 打赏
  • 举报
回复
根据各位的提示,我的MD5转换应该是没有错误的,但是收到的Connect_Resp应答仍然是连接失败,错误是“非法源地址”。我的源地址即企业代码肯定是没有错的,但怎么会有这样的提示呢?
我这边的移动ISGM应答很奇怪,纵使不进行MD5加密,也不会提示“认证错”,还是提示“非法源地址”。
真不明白哪里出了问题,还请高手指点迷津,谢谢!
cdmar79 2003-10-29
  • 打赏
  • 举报
回复
我是Delphi的,你看看。

DateTimeToString( timestr, 'MMDDHHMMSS', now );
StrPCopy( str1, trim( eSourceAdd.Text ) + '000000000' + trim(eShaSec.Text ) + timestr );
LengthI := Length( trim( eSourceAdd.Text ) );
for i := LengthI to ( LengthI + 8 ) do
str1[i] := #0;
Md5UpLen := LengthI + 9 + Length( trim( eShaSec.Text ) ) + 10;
MD5Init( md5_con );
MD5Update( md5_con, str1, Md5UpLen );
MD5Final( md5_con, md5str );
move( md5str, bInit.body.AuthenticatorSource, 16 );
catyou 2003-10-27
  • 打赏
  • 举报
回复
md5与你上面的函数所产生的结果是一样的。可以直接将unsigned char 赋值给char.
catyou 2003-10-24
  • 打赏
  • 举报
回复
AuthenticatorSource:企业代码+9个二进制的0+passwd+timestamp,timestamp以字符串按格式YYMMDDHHMMSS表示,再用md5得到。
Version好象不是这样,是用来表示该连接是MO还是MT的。如果是MT则用0,如果是MO则用1,这个我也是从api文档得到的。现在我的程序运行正常。
catyou 2003-10-24
  • 打赏
  • 举报
回复
直接用MD5即可。如果不能通过,可能是你的输入的字符串不对。AuthenticatorSource中零是指的二进制的0,timestamp是字符串表示的。
xhyxyr 2003-10-24
  • 打赏
  • 举报
回复
好像MD5转换后的是16位的unsigned char("无符号字符型"),但是MT发的都是char型,我直接把转换后的16位无符号字符型逐位赋值待发送字符串相应的字段。
对于MD5,是不是不能够直接把unsigned char型 赋值给 char型
xhyxyr 2003-10-24
  • 打赏
  • 举报
回复
至catyouj:
MD5是由一组函数构成的啊!并不是一个独立函数,我是在VC++6.0环境中实现的。
请问你的MD5是怎样实现的?请留下QQ或是EMAIL,我很想向你好好请教一下。

790

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 其他移动相关
社区管理员
  • 移动开发其他问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧