Java Cipher TripleDES在PHP中移植

时间:2013-07-01 15:15:12

标签: java php 3des

我有这个Java代码,我需要在PHP代码中对其进行转换,以获得相同的输出。 你现在该怎么做?

final byte[] key = {(byte)0x49, (byte)0x45, (byte)0x4D, (byte)0x4B, (byte)0x41, (byte)0x45, (byte)0x52, (byte)0x42, (byte)0x21, (byte)0x4E, (byte)0x41, (byte)0x43, (byte)0x55, (byte)0x4F, (byte)0x59, (byte)0x46};
final byte[] encRndB = {(byte)0x33, (byte)0xD4, (byte)0x8E, (byte)0xAF, (byte)0x75, (byte)0x70, (byte)0x40, (byte)0x5E};

final SecretKeySpec keySpec = new SecretKeySpec(key, "DESede");
final byte[] zeroInitVector = { 0, 0, 0, 0, 0, 0, 0, 0 };

final byte[] rndB      = tripleDes(encRndB, Cipher.DECRYPT_MODE, keySpec, zeroInitVector);

函数tripleDes就是这样:

public static byte[] tripleDes(final byte[] original, final int mode, final SecretKeySpec keySpec, final byte[] ivSpec) throws GeneralSecurityException {
    final Cipher cipher = Cipher.getInstance("DESede/CBC/NoPadding");
    final IvParameterSpec iv = new IvParameterSpec(ivSpec);
    cipher.init(mode, keySpec, iv);
    return cipher.doFinal(original);
}

rndB应该是这样的:

{(byte)0x7B, (byte)0x8B, (byte)0xD0, (byte)0x72, (byte)0x0D, (byte)0xE8, (byte)0x5A, (byte)0x2B}

我试过了:

<?php
function encryptText($plainText, $key) {
    $iv = "\x00\x00\x00\x00\x00\x00\x00\x00";
    $padded = $plainText;

    $encText = mcrypt_decrypt("tripledes", $key, $padded, "cbc", $iv);

    return $encText;
}

$key = "\x49\x45\x4D\x4B\x41\x45\x52\x42\x21\x4E\x41\x43\x55\x4F\x59\x46";
$plainText = "\x33\xD4\x8E\xAF\x75\x70\x40\x5E";
print_r(unpack("H*", encryptText($plainText, $key)));
?>

但它没有给我相同的输出......

0 个答案:

没有答案