【问题标题】:md5 php and android not same [closed]md5 php和android不一样[关闭]
【发布时间】:2011-12-01 06:09:05
【问题描述】:

我正在计算文件的 md5 但得到不同的结果

代码:

 public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState);
AssetManager am = getResources().getAssets();
String as = null;
try {
    InputStream is=am.open("sdapk.db");
    as=is.toString();
}catch(IOException e) {
    Log.v("Error_E",""+e);
}
String  res = md5(as);
TextView tv = new TextView(this);
tv.setText(res);
setContentView(tv);
}
public String md5(String s) { 
try { 
    MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); digest.update(s.getBytes()); byte messageDigest[] = digest.digest();

 // Create Hex String
 StringBuffer hexString = new StringBuffer();
 for (int i=0; i<messageDigest.length; i++)
     hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
return hexString.toString();

} catch (NoSuchAlgorithmException e) {
 e.printStackTrace();
}
return "";
}

}

php md5 : E959637E4E88FDEC377F0A15A109BB9A

【问题讨论】:

  • 您可以使用Linux命令行工具md5sum来检查哪个是正确的。
  • 我没有使用 linux。当应用程序启动时,我必须在运行时检查 md5。上面的代码给出了不同的结果。我在 php 和窗口实用程序中检查了 md5,结果是相同的,但上面的代码没有给出相同的结果。
  • 问题是代码不能正常工作。查看网站上给出原始代码的讨论:Android Snippets

标签: java android md5


【解决方案1】:

InputStream.toString() 可能不会做你想做的事。它在普通 JDK 中没有被覆盖,所以它基本上是 Object.toString()...它会返回一个类似 "java.io.InputStream@12345678" 的字符串。即使 Android 的东西确实返回了一个代表流内容的字符串,它也会变得非常奇怪,因为你从来没有指定使用什么编码来将字节转换为字符。

如果你想对它进行 MD5,你应该读入流。有点像

private static char[] hexDigits = "0123456789abcdef".toCharArray();

public String md5(InputStream is) throws IOException
{
    byte[] bytes = new byte[4096];
    int read = 0;
    MessageDigest digest = MessageDigest.getInstance("MD5");
    while ((read = is.read(bytes)) != -1)
    {
        digest.update(bytes, 0, read);
    }

    byte[] messageDigest = digest.digest();

    StringBuilder sb = new StringBuilder(32);

    // Oh yeah, this too.  Integer.toHexString doesn't zero-pad, so
    // (for example) 5 becomes "5" rather than "05".
    for (byte b : messageDigest)
    {
        sb.append(hexDigits[(b >> 4) & 0x0f]);
        sb.append(hexDigits[b & 0x0f]);
    }

    return sb.toString();
}

【讨论】:

  • 非常感谢它的工作......
猜你喜欢
  • 1970-01-01
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多