在Java中是否有任何方法可以生成一个字符串的MD5哈希?
当前回答
下面是我如何使用它:
final MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));
final byte[] resultByte = messageDigest.digest();
final String result = new String(Hex.encodeHex(resultByte));
来自Apache Commons项目的Hex。
其他回答
我已经使用php,如下所示
<?php
$goodtext = "Not found";
// If there is no parameter, this code is all skipped
if ( isset($_GET['md5']) ) {
$time_pre = microtime(true);
$md5 = $_GET['md5'];
// This is our alphabet
$txt = "0123456789";
$show = 15;
// Outer loop go go through the alphabet for the
// first position in our "possible" pre-hash
// text
for($i=0; $i<strlen($txt); $i++ ) {
$ch1 = $txt[$i]; // The first of two characters
// Our inner loop Note the use of new variables
// $j and $ch2
for($j=0; $j<strlen($txt); $j++ ) {
$ch2 = $txt[$j]; // Our second character
for($k=0; $k<strlen($txt); $k++ ) {
$ch3 = $txt[$k];
for($l=0; $l<strlen($txt); $l++){
$ch4 = $txt[$l];
// Concatenate the two characters together to
// form the "possible" pre-hash text
$try = $ch1.$ch2.$ch3.$ch4;
// Run the hash and then check to see if we match
$check = hash('md5', $try);
if ( $check == $md5 ) {
$goodtext = $try;
break; // Exit the inner loop
}
// Debug output until $show hits 0
if ( $show > 0 ) {
print "$check $try\n";
$show = $show - 1;
}
if($goodtext == $try){
break;
}
}
if($goodtext == $try){
break;
}
}
if($goodtext == $try) {
break;
}
}
if($goodtext == $try){
break;
}
}
// Compute ellapsed time
$time_post = microtime(true);
print "Ellapsed time: ";
print $time_post-$time_pre;
print "\n";
}
?>
你可以参考这个资料来源
import java.security.*;
import javax.xml.bind.*;
byte[] bytesOfMessage = yourString.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytesOfDigest = md.digest(bytesOfMessage);
String digest = DatatypeConverter.printHexBinary(bytesOfDigest).toLowerCase();
不像PHP,你可以通过调用MD5函数ie MD5 ($text)来对文本进行MD5哈希,在Java中它有点复杂。我通常通过调用一个返回md5哈希文本的函数来实现它。 首先在你的主类中创建一个名为md5hashing的函数,如下所示。
public static String md5hashing(String text)
{ String hashtext = null;
try
{
String plaintext = text;
MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
hashtext = bigInt.toString(16);
// Now we need to zero pad it if you actually want the full 32 chars.
while(hashtext.length() < 32 ){
hashtext = "0"+hashtext;
}
} catch (Exception e1)
{
// TODO: handle exception
JOptionPane.showMessageDialog(null,e1.getClass().getName() + ": " + e1.getMessage());
}
return hashtext;
}
现在,在需要时调用该函数,如下所示。
String text = textFieldName.getText();
String pass = md5hashing(text);
在这里,您可以看到hashtext被附加了一个0,以使其与PHP中的md5散列匹配。
我只是下载了common -codec.jar,得到了完美的php,比如md5。这是手册。
只需将其导入到您的项目并使用即可
String Url = "your_url";
System.out.println( DigestUtils.md5Hex( Url ) );
结果出来了。
你需要java.security. messagdigest。
调用MessageDigest. getinstance ("MD5")来获取您可以使用的MessageDigest的MD5实例。
计算哈希的方法是:
以字节[]的形式提供整个输入,并使用md.digest(字节)在一次操作中计算哈希。 通过调用md.update(bytes)每次向MessageDigest提供一个字节[]块。当您完成添加输入字节时,计算与的散列 md.digest()。
md.digest()返回的字节[]是MD5散列。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap