为了账号安全,请及时绑定邮箱和手机立即绑定

php openssl_pbkdf2 在java中的等价物

php openssl_pbkdf2 在java中的等价物

PHP
鸿蒙传说 2021-06-14 12:27:02
我有一些 php 代码来加密发送到 webservice 的消息。现在,我想创建等效的 java 代码但卡住了。请帮忙--PHP 代码看起来像$length = 60;$salt =  "MySalt";$interation = 3000;$bytes = openssl_pbkdf2("mypasspharse", $salt, $length, $interation, "sha1");$value1 = substr($bytes, 0, 10);$value2 = substr($bytes, 10, 20);$value3 = substr($bytes, 30, 30);return array('value1' => $value1, 'value2' => $value2, 'value3' => $value3);——我正在尝试使用 SecretKeyFactory 在 java 中做同样的事情。我的 Java 代码如下所示:SecretKeyFactory factory = SecretKeyFactory                .getInstance("PBKDF2WithHmacSHA1");        PBEKeySpec spec = new PBEKeySpec(passphrase.toCharArray(),                salt.getBytes("UTF-8"), interation, length);现在我不知道如何获得等效的 $value1、$value2、$value3 作为 php 代码。另外,我不确定我是否正在使用上面的 php 代码编写等效的 java 代码的正确方法。任何想法都非常感谢。
查看完整描述

1 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

下面的 2 个示例产生相同的输出:


PHP:


$length = 60;

$salt =  "MySalt";

$interation = 10;

$bytes = openssl_pbkdf2("mypasspharse", $salt, $length, $interation, "sha1");


for ($i = 0; $i < 60; $i++)

{

    echo dechex(ord($bytes[$i]));

    echo '<br>';

}

爪哇:


int length = 60 * 8;

String passphrase = "mypasspharse";

String salt = "MySalt";

int iteration = 10;


SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");

PBEKeySpec spec = new PBEKeySpec(passphrase.toCharArray(), salt.getBytes("UTF-8"), iteration, length);


byte[] bytes = factory.generateSecret(spec).getEncoded();

for (int i = 0; i < 60; i++) {

    System.out.println(Integer.toHexString(bytes[i] & 0xFF));

}


查看完整回答
反对 回复 2021-06-25
  • 1 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信