我在site auth上有Javascript md5。
我只需要实现这个功能:
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
我需要以下方法的帮助:
将little-endian字数组转换为十六进制字符串:
function binl2hex(binarray)
{
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for(var i = 0; i < binarray.length * 4; i++)
{
str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);
}
return str;
}
将字符串转换为little-endian字数组 如果chrsz是ASCII,则字符&gt; 255会以静默方式忽略其高位字节。
function str2binl(str)
{
var bin = Array();
var mask = (1 << chrsz) - 1;
for(var i = 0; i < str.length * chrsz; i += chrsz)
bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
return bin;
}
答案 0 :(得分:1)
如果您只是想实现MD5,那就是内置于java中的内容。
答案 1 :(得分:0)
我开发了一个简单的Java MD5函数,该函数与标准JavaScript函数兼容,您可以从以下代码下载该类:http://developersfound.com/HexMD5.zip
以下是代码:
/* This MD5 hash class is compatible with the JavaScript MD5 has code found at http://pajhome.org.uk/crypt/md5/md5.html */
package com.DevFound;
import java.security.MessageDigest;
public class HexMD5 {
public static String getMD5Str(String inputVal)throws Exception
{
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(inputVal.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
//convert the byte to hex format method 2
StringBuffer hexString = new StringBuffer();
for (int i=0;i<byteData.length;i++) {
String hex=Integer.toHexString(0xff & byteData[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
}
}
我没有使用您特定的JavaScript md5函数测试此代码,但我在代码顶部的注释中列出了它兼容的函数。