【发布时间】:2015-08-27 04:25:58
【问题描述】:
我在使用用 PHP 加密的 CryptoJS 解密数据时遇到了一些问题。也许有人可以告诉我我哪里出错了?
我加密如下:
- 获取哈希密码
- 以(0,16)的子串为key
- 加密 (MCRYPT_RIJNDAEL_128)
- 将密文编码为base64
解密时我也会这样做:
- 获取哈希密码
- 以(0,16)的子串为key
- Base64 解码密文
- 解密
PHP:
public function encrypt($input, $key) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$input = $this->_pkcs5_pad($input, $size);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
JavaScript:
function decrypt(ciphertext, hashedPsw) {
var key = hashedPsw.substring(0, 16);
var key = CryptoJS.enc.Hex.parse(key);
var options = { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, keySize:128 / 32 };
ciphertext = CryptoJS.enc.Base64.parse(ciphertext);
var decrypted = CryptoJS.AES.decrypt(ciphertext, key);
return decrypted;
}
【问题讨论】:
-
只是出于好奇,您是同时使用
https还是仅使用这种方法? -
是的,我也在使用 https :)
-
我对加密有点陌生,也许这就是为什么我不明白为什么你需要两者?如果您使用
https,那么您的所有数据在离开浏览器或服务器之前都会被加密。也就是说,“电线”上没有明文 -
我在之前的帖子中找到了解决方案:[这里][1]。 [1]:stackoverflow.com/questions/24337317/…
标签: javascript php cryptography cryptojs