● yxmcy 关于mac地址的md5加密问题 2013年1月9日 16:13
已知从客户端获取的MAC地址是:mac=00-1E-71-43-90-2B
为什么md5(mac,16)和md5("00-1E-71-43-90-2B",16)结果不同?请哪位大侠指教!
◆ 孙坚 Re: 关于mac地址的md5加密问题 2013年1月11日 11:05
怀疑数据类型不一样。
mac不一定是字符型的,字符型也不一定有“-”。直接输出时显示也不一定准,有可能自动调用了toString方法。
● yxmcy Re: 关于mac地址的md5加密问题 2013年1月11日 14:59
我开始也怀疑是数据类型问题,但是,经测试:
<%=VarType(mac)%>和<%=VarType("00-1E-71-43-90-2B")%>都返回8
<%=TypeName(mac)%>和<%=TypeName("00-1E-71-43-90-2B")%>都返回String
看样子不是数据类型问题,到底问题出在何处呢?还想向大侠们讨教!
● yxmcy Re: 关于mac地址的md5加密问题 2013年1月14日 8:36
好象ASP.NET中有toString方法,而ASP中没有。
我现在找到一个笨办法,那就是先截取再拼接字符串,然后加密就可以了,即:
md5(mid(mac,1,2)&"-"&mid(mac,4,2)&"-"&mid(mac,7,2)&"-"&mid(mac,10,2)&"-"&mid(mac,13,2)&"-"&mid(mac,16,2),16)=md5("00-1E-71-43-90-2B",16)
但这肯定不是最好的办法,哪位指教一下?
◆ Parno Re: 关于mac地址的md5加密问题 2013年1月16日 15:07
MAC 地址有时是用 : 分隔,有时是 -,replace(replace(mac,"-",""),":","") ,去掉分隔符号未尝不可
● yxmcy Re: 关于mac地址的md5加密问题 2013年1月17日 8:05
但是,在我所举例子中:
md5(replace(mac,"-",""),16 )≠md5("001E7143902B",16)
所以,采取部分替换的办法还是不可行。
◆ Jed Re: 关于mac地址的md5加密问题 2013年1月17日 19:30
试过 trim(mac) 吗?
● yxmcy Re: 关于mac地址的md5加密问题 2013年1月21日 8:25
trim(mac)也不行,就是说在原获取值的基础上的处理都不行,只有截取、拼接成新字符串才可以。真的没有其他办法了吗?
◆ Parno Re: 关于mac地址的md5加密问题 2013年1月21日 12:04
会不会含有 NUL字符?replace(mac, chr(0),"") ?
● yxmcy Re: 关于mac地址的md5加密问题 2013年1月21日 14:49
试过,同样不行。
◆ Jed Re: 关于mac地址的md5加密问题 2013年1月21日 22:34
dim i,a
a=len(mac)
for i=1 to len(mac)
a=a & "," & asc(mid(mac,i,1))
next
response.write a
用这段代码看看mac里面都有些什么
◆ Parno Re: 关于mac地址的md5加密问题 2013年1月23日 15:18
确信 len(mac) 和 len("00-1E-71-43-90-2B") 长度一样吗?
response.write(mac="00-1E-71-43-90-2B") 返回 false ?
◆ Parno Re: 关于mac地址的md5加密问题 2013年1月23日 15:20
类型问题好办的 mac=mac & "" 一下就成字符串了
◆ 斜月三星 Re: 关于mac地址的md5加密问题 2013年1月23日 16:30
我的第一个反应,是编码问题。两个都是ANSI编码,还是有一个UTF-8编码?
你的ASP文件,存储的时候,是什么编码?
● yxmcy Re: 关于mac地址的md5加密问题 2013年1月24日 9:45
我的ASP文件,存储编码是charset=gb2312,提取和输入的内容都在同一个文件里,看样子不是编码问题。
但是,正如Parno先生所指:
<%=len(mac)%> 返回18
<%=len("00-1E-71-43-90-2B")%> 返回17
<%response.write(mac="00-1E-90-2B-73-47")%> 返回false
为什么提取的字符显示时和输入的字符一样,而实际上字符串的长度多1呢?
◆ 孙坚 Re: 关于mac地址的md5加密问题 2013年1月24日 14:40
你rspobnse.write("#" & mac & "#")
仔细检查两个##号之间是否有什么不显示的字符。
◆ 孙坚 Re: 关于mac地址的md5加密问题 2013年1月24日 14:43
response打错了,可以复制到记事本中看。
● yxmcy Re: 关于mac地址的md5加密问题 2013年1月25日 10:12
没有不显示的字符,我用的代码是<%=mac%>,应该与<%response.write(mac)%>等效。
◆ Parno Re: 关于mac地址的md5加密问题 2013年2月3日 0:55
即然长度不同,那用循环把取得的mac一个个字符mid(mac,i,1)出来,你一定能看到多出来的是什么字符的。
◆ Parno Re: 关于mac地址的md5加密问题 2013年2月3日 1:10
for i=1 to len(mac)
c=mid(mac,i,1)
response.write(c & "的ASC结果是" & asc(c) & "<br />")
next
● yxmcy Re: 关于mac地址的md5加密问题 2013年2月4日 9:51
经查,尾部多一位不可见字符。现在问题好解决了,只要左截17位字符,再加密就行了。即:
md5(left(mac,17),16)与md5("00-1E-71-43-90-2B",16)等效。
非常感谢Parno等各位先生的指点和关注!