加密PHP,使用Javascript解密(cryptojs) [英] Encrypt with PHP, Decrypt with Javascript (cryptojs)

查看:781
本文介绍了加密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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆