加密PHP,使用Javascript解密(cryptojs) [英] Encrypt with PHP, Decrypt with Javascript (cryptojs)
本文介绍了加密PHP,使用Javascript解密(cryptojs)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
- 我将在php中进行加密,使用cryptojs解密一个小层的安全性
< script src =http://crypto-js.googlecode.com/svn/tags/3.1。 2 /生成/汇总/ aes.js>
<
$ text =这是这里的文字;
$ key =encryptionkey;
$ msgEncrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$ key,$ text,MCRYPT_MODE_CBC,mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB),MCRYPT_RAND));
$ msgBase64 = trim(base64_encode($ msgEncrypted));
echo< h2> PHP< / h2>;
echo< p>加密:< / p>;
echo $ msgEncrypted;
echo< p> Base64:< / p>;
echo $ msgBase64;
?>
< p> AES解密< / p>
< script>
var key ='encryptionkey';
var encrypted =<?php echo $ msgBase64?>;
//尝试过var base64decode = CryptoJS.enc.Base64.parse(encrypted);
var decryptpted = CryptoJS.AES.decrypt(encrypted,key);
console.log(decryptpted.toString(CryptoJS.enc.Utf8));
< / script>
我错过了哪一步?
解决方案
我需要相同的东西,我写了一个适用于CryptoJS 3.x和PHP的简短库,支持openssl。希望这有帮助,来源和示例文件在这里 https://github.com/brainfoolong/cryptojs-aes- php
PHP Lib
/ **
*从CryptoJS json编码字符串解密数据
*
* @param mixed $ passphrase
* @param mixed $ jsonString
* @return mixed
* /
函数cryptoJsAesDecrypt($ passphrase,$ jsonString){
$ jsondata = json_decode($ jsonString,true);
$ salt = hex2bin($ jsondata [s]);
$ ct = base64_decode($ jsondata [ct]);
$ iv = hex2bin($ jsondata [iv]);
$ concatedPassphrase = $ passphrase $ salt;
$ md5 = array();
$ md5 [0] = md5($ concatedPassphrase,true);
$ result = $ md5 [0]; ($ i = 1; $ i< 3; $ i ++){
$ md5 [$ i] = md5($ md5 [$ i - 1] $ concatedPassphrase,true)
$ result。= $ md5 [$ i];
}
$ key = substr($ result,0,32);
$ data = openssl_decrypt($ ct,'aes-256-cbc',$ key,true,$ iv);
return json_decode($ data,true);
}
/ **
*加密cryptojs兼容的json编码字符串
*
* @param mixed $ passphrase
* @param mixed $ value
* @return string
* /
函数cryptoJsAesEncrypt($ passphrase,$ value){
$ salt = openssl_random_pseudo_bytes(8);
$ salted ='';
$ dx ='';
while(strlen($ salted)< 48){
$ dx = md5($ dx。$ passphrase。$ salt,true);
$ salted。= $ dx;
}
$ key = substr($ salted,0,32);
$ iv = substr($ salted,32,16);
$ encrypted_data = openssl_encrypt(json_encode($ value),'aes-256-cbc',$ key,true,$ iv);
$ data = array(ct=> base64_encode($ encrypted_data),iv=> bin2hex($ iv),s=> bin2hex($ salt));
return json_encode($ data);
}
Javascript Lib
var CryptoJSAesJson = {
stringify:function(cipherParams){
var j = {ct:cipherParams.ciphertext.toString(CryptoJS.enc.Base64)};
if(cipherParams.iv)j.iv = cipherParams.iv.toString();
if(cipherParams.salt)j.s = cipherParams.salt.toString();
返回JSON.stringify(j);
},
parse:function(jsonStr){
var j = JSON.parse(jsonStr);
var cipherParams = CryptoJS.lib.CipherParams.create({ciphertext:CryptoJS.enc.Base64.parse(j.ct)});
if(j.iv)cipherParams.iv = CryptoJS.enc.Hex.parse(j.iv)
if(js)cipherParams.salt = CryptoJS.enc.Hex.parse(js)
return cipherParams;
}
}
示例Javascript
var encrypted = CryptoJS.AES.encrypt(JSON.stringify(value to encrypt),my passphrase,{format:CryptoJSAesJson})toString() ;
var decryptpted = JSON.parse(CryptoJS.AES.decrypt(encrypted,my passphrase,{format:CryptoJSAesJson})。toString(CryptoJS.enc.Utf8));
示例PHP
code> $ encrypted = cryptoJsAesEncrypt(我的密码,加密值);
$ decryptpted = cryptoJsAesDecrypt(我的密码,$ encrypted);
I'm having trouble with basic encryption/decryption. I've looked all around for a working example but haven't quite found a working example.
-I will be encrypting in php, decrypting with cryptojs for a small layer of security
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js">
<?
$text = "this is the text here";
$key = "encryptionkey";
$msgEncrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND));
$msgBase64 = trim(base64_encode($msgEncrypted));
echo "<h2>PHP</h2>";
echo "<p>Encrypted:</p>";
echo $msgEncrypted;
echo "<p>Base64:</p>";
echo $msgBase64;
?>
<p>AES Decrypt</p>
<script>
var key = 'encryptionkey';
var encrypted = "<?php echo $msgBase64 ?>";
//tried var base64decode = CryptoJS.enc.Base64.parse(encrypted);
var decrypted = CryptoJS.AES.decrypt(encrypted, key);
console.log( decrypted.toString(CryptoJS.enc.Utf8) );
</script>
Which step am I missing?
解决方案
I've required the same thing and i wrote a short library that works for CryptoJS 3.x and PHP with openssl support. Hope this helps, source plus example files here https://github.com/brainfoolong/cryptojs-aes-php
PHP Lib
/**
* Decrypt data from a CryptoJS json encoding string
*
* @param mixed $passphrase
* @param mixed $jsonString
* @return mixed
*/
function cryptoJsAesDecrypt($passphrase, $jsonString){
$jsondata = json_decode($jsonString, true);
$salt = hex2bin($jsondata["s"]);
$ct = base64_decode($jsondata["ct"]);
$iv = hex2bin($jsondata["iv"]);
$concatedPassphrase = $passphrase.$salt;
$md5 = array();
$md5[0] = md5($concatedPassphrase, true);
$result = $md5[0];
for ($i = 1; $i < 3; $i++) {
$md5[$i] = md5($md5[$i - 1].$concatedPassphrase, true);
$result .= $md5[$i];
}
$key = substr($result, 0, 32);
$data = openssl_decrypt($ct, 'aes-256-cbc', $key, true, $iv);
return json_decode($data, true);
}
/**
* Encrypt value to a cryptojs compatiable json encoding string
*
* @param mixed $passphrase
* @param mixed $value
* @return string
*/
function cryptoJsAesEncrypt($passphrase, $value){
$salt = openssl_random_pseudo_bytes(8);
$salted = '';
$dx = '';
while (strlen($salted) < 48) {
$dx = md5($dx.$passphrase.$salt, true);
$salted .= $dx;
}
$key = substr($salted, 0, 32);
$iv = substr($salted, 32,16);
$encrypted_data = openssl_encrypt(json_encode($value), 'aes-256-cbc', $key, true, $iv);
$data = array("ct" => base64_encode($encrypted_data), "iv" => bin2hex($iv), "s" => bin2hex($salt));
return json_encode($data);
}
Javascript Lib
var CryptoJSAesJson = {
stringify: function (cipherParams) {
var j = {ct: cipherParams.ciphertext.toString(CryptoJS.enc.Base64)};
if (cipherParams.iv) j.iv = cipherParams.iv.toString();
if (cipherParams.salt) j.s = cipherParams.salt.toString();
return JSON.stringify(j);
},
parse: function (jsonStr) {
var j = JSON.parse(jsonStr);
var cipherParams = CryptoJS.lib.CipherParams.create({ciphertext: CryptoJS.enc.Base64.parse(j.ct)});
if (j.iv) cipherParams.iv = CryptoJS.enc.Hex.parse(j.iv)
if (j.s) cipherParams.salt = CryptoJS.enc.Hex.parse(j.s)
return cipherParams;
}
}
Example Javascript
var encrypted = CryptoJS.AES.encrypt(JSON.stringify("value to encrypt"), "my passphrase", {format: CryptoJSAesJson}).toString();
var decrypted = JSON.parse(CryptoJS.AES.decrypt(encrypted, "my passphrase", {format: CryptoJSAesJson}).toString(CryptoJS.enc.Utf8));
Example PHP
$encrypted = cryptoJsAesEncrypt("my passphrase", "value to encrypt");
$decrypted = cryptoJsAesDecrypt("my passphrase", $encrypted);
这篇关于加密PHP,使用Javascript解密(cryptojs)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文