1
sneezry 2015-01-16 23:52:28 +08:00
算法和语言无关,你js库的问题吧
|
2
feijilei OP @sneezry 库是网上找的,试了好几个其他库都不行,我用php 和python 跑出的结果一致,唯独js 不行,有空帮忙看看否
|
3
sneezry 2015-01-17 00:00:17 +08:00
@feijilei 2d45bc98101326f147cc0f21ca8cd162 这个结果我都木有试出来……
是 md5( base64('BvkmoUl5IixfrqzaSTqfcjY3eA51Hpr1pjZPag==') ) ? |
4
sneezry 2015-01-17 00:00:34 +08:00
啊,decode,看错了
|
5
feijilei OP @sneezry 是这个意思,php 和python 跑出的结果都是2d45bc98101326f147cc0f21ca8cd162
|
6
emric 2015-01-17 00:19:26 +08:00
换成 cryptojs 吧, 久经考验的库.
我测试了下完全没有问题, 和后端程序的结果一样. |
7
yfdyh000 2015-01-17 00:20:45 +08:00
|
8
sneezry 2015-01-17 00:23:34 +08:00
@feijilei 原因找到了。php和python默认以iso-8859-1编码字符串,而js以utf-8编码字符串
echo md5(iconv("ISO-8859-1","utf-8", base64_decode('BvkmoUl5IixfrqzaSTqfcjY3eA51Hpr1pjZPag=='))); 这个结果和js的结果就是一样的了。 所以问题解决的办法是把通过js base64解码后得到的字符串转码成iso-8859-1。 理论上decodeURIComponent(escape(str));应该可以解决的,但是Chrome报错 =S,所以这里你需要自己研究一下。 另外,js里源生有base64函数,不用依赖库。 btoa(str)是编码,atob(str)是解码。 不过编码只能对iso-8859-1编码的字符串进行,ascii里的没问题,汉字什么的就得多一步操作: btoa(unescape(encodeURIComponent(str))); 以上。 |
9
sneezry 2015-01-17 00:45:26 +08:00
|