Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android或java中的MD5哈希_Java_Android_Encryption_Md5 - Fatal编程技术网

android或java中的MD5哈希

android或java中的MD5哈希,java,android,encryption,md5,Java,Android,Encryption,Md5,我需要转换MD5哈希中的字符串 我正在使用 MessageDigest md = MessageDigest.getInstance("MD5"); byte[] thedigest = md.digest(bytesOfMessage); final protected static char[] hexArray = "0123456789ABCDEF".toCharArray(); public static String bytesToHex( byte[] bytes )

我需要转换MD5哈希中的字符串

我正在使用

MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);

final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
    public static String bytesToHex( byte[] bytes )
    {
        char[] hexChars = new char[ bytes.length * 2 ];
        for( int j = 0; j < bytes.length; j++ )
        {
            int v = bytes[ j ] & 0xFF;
            hexChars[ j * 2 ] = hexArray[ v >>> 4 ];
            hexChars[ j * 2 + 1 ] = hexArray[ v & 0x0F ];
        }
        return new String( hexChars );
    }
MessageDigest md=MessageDigest.getInstance(“MD5”);
字节[]thedigest=md.digest(bytesOfMessage);
最终受保护的静态字符[]hexArray=“0123456789ABCDEF”.toCharArray();
公共静态字符串bytesToHex(字节[]字节)
{
char[]hexChars=新字符[bytes.length*2];
对于(int j=0;j>>4];
hexChars[j*2+1]=hexArray[v&0x0F];
}
返回新字符串(hexChars);
}
它是给输出像这个网站

但我需要生成散列作为这个给定输出

请在两个站点中使用测试

使用上述功能,我得到的o/p像第一个网站,但我需要的第二个网站是给予

是否有任何不同的功能或我在这方面遗漏了什么


谢谢。

第二个网站只是简单地使用base64而不是十六进制来将二进制数据表示为文本。因此,您可以完全摆脱
bytesToHex
方法,只需使用:


(顺便说一句,我不想在变量名中使用
作为前缀-它没有任何好处,只是粗糙而已。)

使用此方法,它将以相同的格式返回

public static String getMd5Hash(String input) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(input.getBytes());
        BigInteger number = new BigInteger(1, messageDigest);
        String md5 = number.toString(16);
        while (md5.length() < 32)
           md5 = "0" + md5;
        return md5;
        } catch (NoSuchAlgorithmException e) {
         Log.e("MD5", e.getLocalizedMessage());
      return null;
    }
    }
将以以下格式返回:siao7orf4ftsuoutxx7oxg==



对不起,反之亦然

不,这将返回十六进制,这是OP的代码在IMO中已经以一种更好的方式执行的。OP希望它在base64中,如第二个链接所示。此外,当示例代码显示字节时,您的答案假设OP将数据作为字符串,并使用平台默认编码将该文本转换为字节。最后,如果你很好地缩进代码,你的代码会更容易阅读。我已经按照你的建议修改了代码。。它的工作很好。。。非常感谢:)我认为
Base64。不应该使用任何包装来代替
Base64。默认值
<代码>Base64。默认值
将在Base64字符串的末尾生成换行符。
public static String getMd5Hash(String input) {
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] messageDigest = md.digest(input.getBytes());
        BigInteger number = new BigInteger(1, messageDigest);
        String md5 = number.toString(16);
        while (md5.length() < 32)
           md5 = "0" + md5;
        return md5;
        } catch (NoSuchAlgorithmException e) {
         Log.e("MD5", e.getLocalizedMessage());
      return null;
    }
    }
String base64format =  Base64.encodeToString(thedigest, Base64.DEFAULT); //as given by @Jon Skeet