我正在尝试使用以下代码将String转换为其MD5
表示:
public static void main(String[] args) throws NoSuchAlgorithmException {
String s = "oshai";
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(s.getBytes(),0,s.length());
String md5 = new BigInteger(1,m.digest()).toString(16);
System.out.println(md5.length());
}
返回的String添加了位数(31,因此它可以是十六进制数)。我做错了什么?
答案 0 :(得分:2)
这种方法肯定有用:
private String hashWithMD5(String text) throws UnsupportedEncodingException, NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] digest = messageDigest.digest(text.getBytes("UTF-8"));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < digest.length; i++) {
sb.append(Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
答案 1 :(得分:2)
您不想使用BigInteger。尝试更传统的toHexString方法..
public static void main(String[] args) throws NoSuchAlgorithmException {
String s = "oshai";
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(s.getBytes(),0,s.length());
String string = toHexString(m.digest());
System.out.println(string);
}
public static String toHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for(byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
答案 2 :(得分:0)
我遇到错误的错误&#34; 00&#34;在左侧,将字符串转换为加密格式。
通常情况下,您无法使用常见的md5方法在应用中找到错误。
所以,请用字符串&#34; sandeep&#34;测试你的应用程序。 (我使用它是因为它在左侧有一个&#34; 00&#34;
这个问题搞砸了我的时间,最后我从一个链接找到了以下解决方案。
&#34; md5字符串在leftside时出现错误,即字符串“sandeep”转换为“DCF16D903E5890AABA465B0B1BA51F”而不是实际的“00DCF16D903E5890AABA465B0B1BA51F
我最终使用了这种方法,在我的应用中很酷。&#34;
public static String md5(String inputString) {
try {
// Create MD5 Hash
MessageDigest msgDigest = java.security.MessageDigest.getInstance("MD5");
msgDigest.update(inputString.getBytes());
byte msgDigestBytes[] = msgDigest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < msgDigestBytes.length; i++) {
String h = Integer.toHexString(0xFF & msgDigestBytes[i]);
while (h.length() < 2)
h = "0" + h;
hexString.append(h);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
价:http://www.coderexception.com/CbHuB1uHPWxXUQXi/converting-string-to-md5-gives-add-number-of-digits
答案 3 :(得分:-2)
使用此方法:
public static String md5(String input){
String md5 = null;
if (null == input)
return null;
try {
// Create MessageDigest object for MD5
MessageDigest digest = MessageDigest.getInstance("MD5");
// Update input string in message digest
digest.update(input.getBytes(), 0, input.length());
// Converts message digest value in base 16 (hex)
md5 = new BigInteger(1, digest.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return md5;
}