【发布时间】:2015-06-27 22:31:29
【问题描述】:
我正在尝试使用相同类型的操作(即 AES-256)在服务器端和客户端对数据进行加密和解密。
在服务器上我使用PHP和客户端我使用CryptoJS到目前为止我只能在服务器上加密和解密客户端,请参见代码:
JS
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/pbkdf2.js"></script>
<script>
var salt = CryptoJS.lib.WordArray.random(128/8);
var key256Bits500Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, { keySize: 256/32, iterations: 500 });
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
var encrypted = CryptoJS.AES.encrypt("Message", key256Bits500Iterations, { iv: iv });
var data_base64 = encrypted.ciphertext.toString(CryptoJS.enc.Base64);
var iv_base64 = encrypted.iv.toString(CryptoJS.enc.Base64);
var key_base64 = encrypted.key.toString(CryptoJS.enc.Base64);
</script>
PHP
<?php
$encrypted = base64_decode("data_base64"); // data_base64 from JS
$iv = base64_decode("iv_base64"); // iv_base64 from JS
$key = base64_decode("key_base64"); // key_base64 from JS
$plaintext = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_128, $key, $encrypted, MCRYPT_MODE_CBC, $iv ), "\t\0 " );
如何在双方(客户端和服务器)上加密和解密数据,以便使用 PHP 和 CryptoJS 以相同的语言进行通信?
【问题讨论】:
-
密钥长度必须为 16、24 或 32 字节,IV 长度必须为 16 字节。是吗?
-
@ArtjomB。更正这个错误,但是现在导致很多奇怪的字符(失败),可能是...?
-
你完全改变了这个问题。不要那样做,因为任何答案都会立即失去所有价值。这不再有意义了。您需要解析密钥和IV。
-
@ArtjomB。对不起,您的问题解决了我的主要问题,并将被标记为正确.. 但是出现了另一个问题.. 你知道 cryptojs 如何包装加密输出吗?我认为这是问题
-
查看我的更新答案。我在那里添加了没有 PBKDF2 的完整代码。我还回滚了您的问题,以便我的回答再次有意义。我希望你能看到问题。
标签: javascript php encryption cryptography cryptojs