● yxmcy 關(guān)于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)結(jié)果不同?請哪位大俠指教!
◆ 孫堅 Re: 關(guān)于mac地址的md5加密問題 2013年1月11日 11:05
懷疑數(shù)據(jù)類型不一樣。
mac不一定是字符型的,字符型也不一定有“-”。直接輸出時顯示也不一定準,有可能自動調(diào)用了toString方法。
● yxmcy Re: 關(guān)于mac地址的md5加密問題 2013年1月11日 14:59
我開始也懷疑是數(shù)據(jù)類型問題,但是,經(jīng)測試:
<%=VarType(mac)%>和<%=VarType("00-1E-71-43-90-2B")%>都返回8
<%=TypeName(mac)%>和<%=TypeName("00-1E-71-43-90-2B")%>都返回String
看樣子不是數(shù)據(jù)類型問題,到底問題出在何處呢?還想向大俠們討教!
● yxmcy Re: 關(guān)于mac地址的md5加密問題 2013年1月14日 8:36
好象ASP.NET中有toString方法,而ASP中沒有。
我現(xiàn)在找到一個笨辦法,那就是先截取再拼接字符串,然后加密就可以了,即:
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: 關(guān)于mac地址的md5加密問題 2013年1月16日 15:07
MAC 地址有時是用 : 分隔,有時是 -,replace(replace(mac,"-",""),":","") ,去掉分隔符號未嘗不可
● yxmcy Re: 關(guān)于mac地址的md5加密問題 2013年1月17日 8:05
但是,在我所舉例子中:
md5(replace(mac,"-",""),16 )≠md5("001E7143902B",16)
所以,采取部分替換的辦法還是不可行。
◆ Jed Re: 關(guān)于mac地址的md5加密問題 2013年1月17日 19:30
試過 trim(mac) 嗎?
● yxmcy Re: 關(guān)于mac地址的md5加密問題 2013年1月21日 8:25
trim(mac)也不行,就是說在原獲取值的基礎(chǔ)上的處理都不行,只有截取、拼接成新字符串才可以。真的沒有其他辦法了嗎?
◆ Parno Re: 關(guān)于mac地址的md5加密問題 2013年1月21日 12:04
會不會含有 NUL字符?replace(mac, chr(0),"") ?
● yxmcy Re: 關(guān)于mac地址的md5加密問題 2013年1月21日 14:49
試過,同樣不行。
◆ Jed Re: 關(guān)于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: 關(guān)于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: 關(guān)于mac地址的md5加密問題 2013年1月23日 15:20
類型問題好辦的 mac=mac & "" 一下就成字符串了
◆ 斜月三星 Re: 關(guān)于mac地址的md5加密問題 2013年1月23日 16:30
我的第一個反應(yīng),是編碼問題。兩個都是ANSI編碼,還是有一個UTF-8編碼?
你的ASP文件,存儲的時候,是什么編碼?
● yxmcy Re: 關(guān)于mac地址的md5加密問題 2013年1月24日 9:45
我的ASP文件,存儲編碼是charset=gb2312,提取和輸入的內(nèi)容都在同一個文件里,看樣子不是編碼問題。
但是,正如Parno先生所指:
<%=len(mac)%> 返回18
<%=len("00-1E-71-43-90-2B")%> 返回17
<%response.write(mac="00-1E-90-2B-73-47")%> 返回false
為什么提取的字符顯示時和輸入的字符一樣,而實際上字符串的長度多1呢?
◆ 孫堅 Re: 關(guān)于mac地址的md5加密問題 2013年1月24日 14:40
你rspobnse.write("#" & mac & "#")
仔細檢查兩個##號之間是否有什么不顯示的字符。
◆ 孫堅 Re: 關(guān)于mac地址的md5加密問題 2013年1月24日 14:43
response打錯了,可以復(fù)制到記事本中看。
● yxmcy Re: 關(guān)于mac地址的md5加密問題 2013年1月25日 10:12
沒有不顯示的字符,我用的代碼是<%=mac%>,應(yīng)該與<%response.write(mac)%>等效。
◆ Parno Re: 關(guān)于mac地址的md5加密問題 2013年2月3日 0:55
即然長度不同,那用循環(huán)把取得的mac一個個字符mid(mac,i,1)出來,你一定能看到多出來的是什么字符的。
◆ Parno Re: 關(guān)于mac地址的md5加密問題 2013年2月3日 1:10
for i=1 to len(mac)
c=mid(mac,i,1)
response.write(c & "的ASC結(jié)果是" & asc(c) & "<br />")
next
● yxmcy Re: 關(guān)于mac地址的md5加密問題 2013年2月4日 9:51
經(jīng)查,尾部多一位不可見字符,F(xiàn)在問題好解決了,只要左截17位字符,再加密就行了。即:
md5(left(mac,17),16)與md5("00-1E-71-43-90-2B",16)等效。
非常感謝Parno等各位先生的指點和關(guān)注!