java - 是否有 PHP 函数 "hash"的 Java 等价物?

标签 java php mysql hash equivalent

我正在尝试将 Java 应用程序与 Web 应用程序(使用 PHP)连接起来,一个人可以在 Java 应用程序或 Web 应用程序上注册用户。我试图在 Java 中找到 PHP“散列”函数的等价物。

为了在网络应用程序中创建哈希,这是我使用的代码:

$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 中找到相同的方法。

最佳答案

是的,看看Java的MessageDigest类: 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();

关于java - 是否有 PHP 函数 "hash"的 Java 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21517595/

相关文章:

php - 在 Laravel 5.0 中从数据库检索数据

mysql - 如何使用两个分类条件过滤wordpress选择查询?

MySQL 空间搜索 HSV(颜色)值?

java - Hibernate JPA 未在 ManyToMany 关联上创建连接表

java - 使用多线程顺序打印语句

php - 如何使用 eloquent with 访问 laravel 中的表不直接附加

php - 如何在两个不同的列中分别插入下拉值和下拉名称

mysql - mysql 中的连接表

java - 在内容 Pane 上绘制线条 Java swing

5000~ 用户的 Java Web 应用程序