繁体   English   中英

Android或Java中的MD5哈希

[英]MD5 hash in android or java

我需要在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 );
    }

它正在提供类似此网站的输出http://www.md5.cz/

但我需要生成哈希,因为此http://webcodertools.com/hashstring提供了输出。

请在两个站点中使用测试

通过使用上述功能,我得到了像第一个站点一样的o / p,但是我需要第二个站点给出的。

是否有其他功能?我是否在其中缺少某些功能?

谢谢。

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

String base64Digest = Base64.encodeToString(thedigest, Base64.DEFAULT);

(顺便说一句,我会避免使用the作为变量名的前缀-它提供了没有任何好处,而只是冗余代码。)

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

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;
    }
    }

它以// WHAT的MD5格式返回// // 4a2028eceac5e1f4d252ea13c71ecec6格式,

String base64format =  Base64.encodeToString(thedigest, Base64.DEFAULT); //as given by @Jon Skeet

将以SiAo7OrF4fTSUuoTxx7Oxg ==的格式返回


反之亦然,抱歉。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM