【发布时间】:2011-04-07 08:35:16
【问题描述】:
谁能告诉我如何在 Java 中将字符串转换为 MD5 格式?
我有这样的代码,但我想要 32 个字符的 MD5 格式。
UUID uuid = UUID.randomUUID();
String token = uuid.toString().substring(0,12);
【问题讨论】:
-
您只想将 UUID 转换为十六进制吗?应该是 32 个字符长...
谁能告诉我如何在 Java 中将字符串转换为 MD5 格式?
我有这样的代码,但我想要 32 个字符的 MD5 格式。
UUID uuid = UUID.randomUUID();
String token = uuid.toString().substring(0,12);
【问题讨论】:
实施
import java.security.MessageDigest;
import java.math.BigInteger;
import java.lang.String
public class SecurityUtil {
public static String stringToMD5(String string) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(string.getBytes(Charset.forName("UTF-8")),0,string.length());
return new BigInteger(1,messageDigest.digest()).toString(16);
}
}
用法:
System.out.println(String.format("MD5: %s", stringToMD5("P@$$\\/\\/R|)")));
输出:
MD5: 91162629d258a876ee994e9233b2ad87*
在此示例中使用了编码 UTF-8。
What is Charset ?
What is MessageDigest ?
What is UTF-8 >
*md5 是来自 Wikipedia 的示例。
【讨论】:
String.getBytes()时指定编码?
我又无聊了……
/**
* @author BjornS
* @created 2. sep. 2010
*/
public enum HashUtil {
SHA1("SHA1"), MD5("MD5"), MD2("MD2"), SHA256("SHA-256"), SHA384("SHA-384"), SHA512("SHA-512");
private final MessageDigest digester;
HashUtil(String algorithm) {
try {
digester = MessageDigest.getInstance(algorithm);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
public String hash(byte[] in) {
return toHexString(digester.digest(in));
}
public String hash(String in) {
return hash(in.getBytes());
}
public String hash(String in, Charset characterSet) {
return hash(in.getBytes(characterSet));
}
public byte[] hashToByteArray(String in) {
return digester.digest(in.getBytes());
}
public byte[] hashToByteArray(String in, Charset characterSet) {
return digester.digest(in.getBytes(characterSet));
}
public byte[] hashToByteArray(byte[] in) {
return digester.digest(in);
}
private String toHexString(byte[] digest) {
StringBuffer hexStr = new StringBuffer(40);
for (byte b : digest) {
hexStr.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
}
return hexStr.toString();
}
}
-
/*** ***/
// Use Charsets from Google Guava rather than manually code the charset request, you also don't have to catch exceptions this way! :)
pulic static void main(String... args) {
UUID uuid = UUID.randomUUID();
String uuidString = uuid.toString().substring(0,12);
String token = HashUtil.MD5.hash(uuidString,Charsets.UTF_8);
}
【讨论】:
这对我有用..
UUID uuid = UUID.randomUUID();
String token = MD5.digest(uuid.toString().substring(0,12));
感谢所有回答的家伙。
【讨论】: