我正在尝试将Java应用程序与Web应用程序(在PHP中)连接起来,其中一个人可以在Java应用程序或Web应用程序上注册用户。我试图找到相当于Java中的PHP“哈希”函数。
要在Web应用程序中创建哈希,这是我使用的代码:
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
$password = hash('sha256', $_POST['password'] . $salt);
for($round = 0; $round < 65536; $round++) {
$password = hash('sha256', $password . $salt);
}
加密的密码和盐与用户一起存储在他们自己的列中,有点像这样:
|=====|==========|============|==========|
| ID | Username | Password | Salt |
| 1 | Bob | x24da0el.. | 39bbc9.. |
|=====|==========|============|==========|
我已经尝试了一切,但我无法在Java中找到相同的方法。
答案 0 :(得分:4)
是的,看看MessageDigest类的Java: http://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html
它提供了3种哈希算法:
-MD5
-SHA-1
-SHA-256
散列文件的示例:
MessageDigest md = MessageDigest.getInstance("SHA-256");
FileInputStream fis = new FileInputStream("~/Documents/Path/To/File.txt");
byte[] dataBytes = new byte[1024];
int nread = 0;
while ((nread = fis.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
};
byte[] mdbytes = md.digest();
//Convert "mdbytes" to hex String:
StringBuffer hexString = new StringBuffer();
for (int i=0;i<mdbytes.length;i++) {
hexString.append(Integer.toHexString(0xFF & mdbytes[i]));
}
return hexString.toString();
以下是散列字符串的示例:
String password = "123456";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(password.getBytes());
byte byteData[] = md.digest();
//Convert "byteData" to hex String:
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();