ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript-使用CryptoJs加密并使用Phalcon解密

2019-11-18 15:31:56  阅读:424  来源: 互联网

标签:phalcon cryptojs encryption javascript php


我正在尝试从CryptoJS加密一些文本并使用Phalcon对其进行解密.

我加密如下

CryptoJS.AES.encrypt("MyText", 'key123');

现在比较一下,我用Phalcon加密了相同的值,

$this->crypt = new Crypt();
$this->crypt->encrypt("MyText", 'key123');

现在我从JS和PHP获得的值是不同的.

Phalcon默认加密为AES,CryptoJS中也是如此.

请帮我.我希望双方都具有相同的价值.

解决方法:

Phalcon中的默认密码是Rijndael-256,CryptoJS不支持.有必要将其更改为Rijndael-128(AES).为了能够加密任意二进制数据,还必须在Phalcon中使用某种填充模式.

$keyHex = "0102030405060708090a0b0c0d0e0f";

$this->crypt = new Crypt();
$this->crypt->setPadding($this->crypt->PADDING_PKCS7);
$this->crypt->setCipher("rijndael-128");

// encryption
$ct = base64_encode($this->crypt->encrypt("MyText", hex2bin($keyHex)));

// decryption
var_dump($this->crypt->decrypt(base64_decode($ct), hex2bin($keyHex)));

128位初始化向量的前缀是密文,因此在CryptoJS中必须以相同的方式完成.

var key = CryptoJS.enc.Hex.parse("0102030405060708090a0b0c0d0e0f");
var iv = CryptoJS.lib.WordArray.random(128/8);
var ct = CryptoJS.AES.encrypt("MyText", key, {
    iv: iv
}).ciphertext;
return iv.concat(ct).toString(CryptoJS.enc.Base64);

注意事项:

>必须随机生成密钥.这是一个示例16字节密钥(32个十六进制),并且必须具有特定的长度. AES支持16、24和32字节(32、48、64十六进制)的密钥大小.
>每次加密都会随机生成IV,因此无法使用CryptoJS和Phalcon中的相同密钥对相同文本进行加密来检查兼容性.有必要在其中一个进行加密,然后在另一个进行解密.
>没有身份验证的对称加密可能非常危险.根据您的情况,可能会发起padding-oracle攻击.添加身份验证的常用方法是使用单独的密钥在IV密文上运行消息身份验证代码.在这方面,采用encrypt-then-MAC方案的HMAC-SHA256是一个不错的选择.
>如果将“密钥”作为字符串传递给CryptoJS.AES.encrypt,则它将调用与OpenSSL兼容的密钥派生函数(EVP_BytesToKey).给定的“密钥”假定为密码,因此它会生成随机盐,并从这两个密钥中得出实际的密钥和IV.
> Phalcon使用了mcrypt,它是一种废弃软件,并且存在许多错误.

标签:phalcon,cryptojs,encryption,javascript,php
来源: https://codeday.me/bug/20191118/2029144.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有