Java Android MD5问题计算MD5,缺少字符

Java Android MD5问题计算MD5,缺少字符,java,android,md5,Java,Android,Md5,我一直在开发一个Android应用程序,在应用程序的某些部分,我需要计算某个字符串的MD5。我一直在使用以下代码,但输出字符串如果必须转换为字符串的字节小于10,则在双字节表示中将丢失0: MessageDigest di = java.security.MessageDigest.getInstance("MD5"); di.update(cadena.getBytes()); byte mdi[] = di.digest(); StringBuffer md

我一直在开发一个Android应用程序,在应用程序的某些部分,我需要计算某个字符串的MD5。我一直在使用以下代码,但输出字符串如果必须转换为字符串的字节小于10,则在双字节表示中将丢失0:

    MessageDigest di = java.security.MessageDigest.getInstance("MD5");
    di.update(cadena.getBytes());
    byte mdi[] = di.digest();

    StringBuffer md5= new StringBuffer();
    for (byte b : mdi) {
        md5.append(Integer.toHexString(0xFF & b));
    }
例如,如果我传递字符串109370,它必须返回的MD5是932FF0696B043D7A83E1FF84FE298C5,但它会计算932FF069634D7A83E1FF84FE298C5

这是因为字节数组有一个4和整数。toHexString()只返回一个字符数组,而不是两个字符数组

有没有想过我该怎么处理

谢谢

使用以下命令:

public String calculateMD5(String string) {
    StringBuilder result = new StringBuilder();
    try {
        MessageDigest m = MessageDigest.getInstance("MD5");
        m.update(string.getBytes("UTF8"));

        byte s[] = m.digest();

        for (int i = 0; i < s.length; i++) {
            result.append(Integer.toHexString((0x000000ff & s[i]) | 0xffffff00).substring(6));
        }
    } catch (NoSuchAlgorithmException e) {
        throw new IllegalStateException("Password hash is unsupported by device android implementation.", e);
    } catch (UnsupportedEncodingException e) {
        throw new IllegalStateException("Password hash is unsupported by device android implementation.", e);
    }
    return result.toString();
}
公共字符串计算器EMD5(字符串){
StringBuilder结果=新建StringBuilder();
试一试{
MessageDigest m=MessageDigest.getInstance(“MD5”);
m、 更新(string.getBytes(“UTF8”);
字节s[]=m.digest();
对于(int i=0;i
使用以下方法:

public String calculateMD5(String string) {
    StringBuilder result = new StringBuilder();
    try {
        MessageDigest m = MessageDigest.getInstance("MD5");
        m.update(string.getBytes("UTF8"));

        byte s[] = m.digest();

        for (int i = 0; i < s.length; i++) {
            result.append(Integer.toHexString((0x000000ff & s[i]) | 0xffffff00).substring(6));
        }
    } catch (NoSuchAlgorithmException e) {
        throw new IllegalStateException("Password hash is unsupported by device android implementation.", e);
    } catch (UnsupportedEncodingException e) {
        throw new IllegalStateException("Password hash is unsupported by device android implementation.", e);
    }
    return result.toString();
}
公共字符串计算器EMD5(字符串){
StringBuilder结果=新建StringBuilder();
试一试{
MessageDigest m=MessageDigest.getInstance(“MD5”);
m、 更新(string.getBytes(“UTF8”);
字节s[]=m.digest();
对于(int i=0;i
您可以使用java.util.Formatter:

    Formatter fmt = new Formatter(md5);
    for (byte b : mdi) {
        fmt.format("%02x", b&0xff);
    }
    fmt.close();

您可以使用java.util.Formatter:

    Formatter fmt = new Formatter(md5);
    for (byte b : mdi) {
        fmt.format("%02x", b&0xff);
    }
    fmt.close();

以下是我正在使用的代码:

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class MD5Encode {
   private static String convertedToHex(byte[] data) {
    StringBuffer buf = new StringBuffer();

    for (int i = 0; i < data.length; i++) {
        int halfOfByte = (data[i] >>> 4) & 0x0F;
        int twoHalfBytes = 0;

        do {
            if ((0 <= halfOfByte) && (halfOfByte <= 9)) {
                buf.append((char) ('0' + halfOfByte));
            } else {
                buf.append((char) ('a' + (halfOfByte - 10)));
            }

            halfOfByte = data[i] & 0x0F;

        } while (twoHalfBytes++ < 1);
    }
    return buf.toString();
    }

    public static String MD5(String text) throws NoSuchAlgorithmException,
        UnsupportedEncodingException {
    MessageDigest md;
    md = MessageDigest.getInstance("MD5");
    byte[] md5 = new byte[64];
    md.update(text.getBytes("iso-8859-1"), 0, text.length());
    md5 = md.digest();
    return convertedToHex(md5);
   }
}

希望这能对您有所帮助:)

以下是我正在使用的代码:

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


public class MD5Encode {
   private static String convertedToHex(byte[] data) {
    StringBuffer buf = new StringBuffer();

    for (int i = 0; i < data.length; i++) {
        int halfOfByte = (data[i] >>> 4) & 0x0F;
        int twoHalfBytes = 0;

        do {
            if ((0 <= halfOfByte) && (halfOfByte <= 9)) {
                buf.append((char) ('0' + halfOfByte));
            } else {
                buf.append((char) ('a' + (halfOfByte - 10)));
            }

            halfOfByte = data[i] & 0x0F;

        } while (twoHalfBytes++ < 1);
    }
    return buf.toString();
    }

    public static String MD5(String text) throws NoSuchAlgorithmException,
        UnsupportedEncodingException {
    MessageDigest md;
    md = MessageDigest.getInstance("MD5");
    byte[] md5 = new byte[64];
    md.update(text.getBytes("iso-8859-1"), 0, text.length());
    md5 = md.digest();
    return convertedToHex(md5);
   }
}

希望这能对您有所帮助:)

谢谢您的示例,我想函数docstring中没有很好地解释它。但是您发送的代码片段似乎可以正常工作。因此,不可能使用自定义函数来实现这一点。感谢您的示例,我想在函数docstring中没有对其进行很好的解释。但是您发送的代码片段似乎可以正常工作。因此,不可能使用自定义函数来执行此操作。