簡體   English   中英

php openssl_pbkdf2在Java中等效

[英]php openssl_pbkdf2 equivalent in java

我有一些php代碼來加密發送到Web服務的消息。 現在,我想創建等效的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代碼的正確方法。 任何想法都非常感謝。

謝謝,

以下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>';
}

Java:

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));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM