【发布时间】:2014-09-12 05:21:52
【问题描述】:
我正在尝试编写一个跨语言加密/解密工具(JavaScript 与 PHP/mcryp),但我有点卡住了。
你可以在这里找到我的js代码http://jsbin.com/siyesaqa/31/edit,而我的php代码是这样的:
class Manager
{
/**
* @param string $content
* @param string $passphrase
* @return string
*/
public static function encrypt($plain, $passphrase = null) {
$salt = mcrypt_create_iv(
128 / 8,
MCRYPT_DEV_URANDOM
);
$cipher = hash_pbkdf2(
"sha256",
$passphrase ? $passphrase : $_ENV['SECURITY_KEY'],
$salt,
100,
128 / 8
);
$iv = mcrypt_create_iv(
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
MCRYPT_RAND
);
$encrypted = mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
$cipher,
$plain,
MCRYPT_MODE_CBC,
$iv
);
return base64_encode($salt) . base64_encode($iv) . base64_encode($encrypted);
}
/**
* @param string $encContent
* @param string $passphrase
* @return string
*/
public static function decrypt($encrypted, $passphrase = null) {
$encrypted = base64_decode($passphrase ? $passphrase : $_ENV['SECURITY_KEY']);
$salt = substr($encrypted, 0, 128 / 8);
$cipher = hash_pbkdf2("sha256", $passphrase, $salt, 1000, 128 / 8);
$iv = substr($encrypted, 128 / 8, 128 / 8);
return trim(mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$cipher,
substr($encrypted, 128 / 8 * 2),
MCRYPT_MODE_CBC,
$iv
), "\0\t");
}
}
如您所见,我在为 salt 和 cipher 变量返回相同值时遇到了一些麻烦。
哪位对这两个库有更多经验的人可以给我一个提示吗?
非常感谢您。
【问题讨论】:
标签: cryptography mcrypt cryptojs