如何将此自定义MD5 Java函数转换为JavaScript
我有这个自定义函数来计算MD5散列,是用Java编写的。我不能改变它。我需要将其转换为JavaScript,以便在客户端使用它。我自己尝试过,但无法使用JavaScript数据类型(特别是Javachar[]
)。。。感谢您的帮助,谢谢
// codes array
char[] codes = new char[64];
// initialise
private void initCodes(){
codes = new char[64];
codes[0] = '$';
int count = 0;
for (char i='0';i<='9';i++){ count++; codes[count] = i; }
for (char i='A';i<='Z';i++){ count++; codes[count] = i; }
for (char i='a';i<='z';i++){ count++; codes[count] = i; }
codes[63] = '£';
}
// custom MD5 algorithm
public String customMD5(String source) {
initCodes();
byte[] buf = new byte[source.length()];
buf = source.getBytes();
MessageDigest algorithm = null;
try {
algorithm = MessageDigest.getInstance("MD5");
} catch(NoSuchAlgorithmException e){}
algorithm.reset();
algorithm.update(buf);
byte[] digest = algorithm.digest();
int len = digest.length;
char[] encrypted = new char[len];
for (int i=0;i<len;i++)
encrypted[i] = codes[(int)(Math.floor((double)((digest[i]+128)/4)))];
return new String(encrypted);
}
# 1 楼答案
请参见此部分:
??这就是那些东西访问内置在Java运行时中的MD5代码的地方您必须在那里提出自己的MD5实现,这(委婉地说)将是一个棘手的部分
发布的Java代码真正做的(除了调用运行时进行实际的散列之外)就是通过字符查找表映射结果散列(无论如何,它是散列的一部分)
编辑-由该Java代码构建的查找表是一个带有“$”、数字、大写字母、小写字母的数组,然后(出乎意料地)是“*”。(最后一个字符令人惊讶,因为它不是旧式的7位ASCII字符代码,但不管怎样。)在JavaScript中,这是:
然后,Java代码获取哈希算法生成的每个8位字节,并通过向字节中添加128,然后除以4来查找代码字符。Java字节被视为有符号的值,这样就可以将每个字节映射到范围0。。。63.然后将该值用作代码数组的查找
因此,如果您有一个JavaScript MD5工具,可以返回一个范围为-128的数字数组。。。127(即有符号8位值),您可以通过如下代码数组转换结果:
由OP编辑: 我冒昧地在这里发布了正确的解决方案,该解决方案高度源自@Pointy的解决方案。它需要md5。来自http://pajhome.org.uk/crypt/md5/的js