CI加密,cryptojs解密, 使用aes-256-cbc

原创 2016年06月01日 18:16:08

使用的版本为CodeIgniter 3.02., cryptojs 3.1.6, php需要支持php-openssl扩展,此外还使用了一个jquery扩展,用于base64转换(https://github.com/carlo/jquery-base64

 

先上代码。

 

php代码

 

$this->load->library('encryption');
$key =$this->encryption->create_key(32);
$txt = '测试文本';
$this->encryption->initialize(['driver'=> 'openssl']);
$txt_encrypted =$this->encryption->encrypt($txt, ['cipher' => 'aes-256', 'mode' =>'cbc',  'key' => $key, 'hmac' =>false, 'raw_data' => false]);
 
$result = ['key' => base64_encode($key),'txt_encrypted' => $txt_encrypted];
$this->load->view('test_encryption',$result);


 

对应模板页的js代码

 

		   var txt = $.base64.decode("<?php echo $txt_encrypted;?>");
                   var key = "<?php echo $key; ?>";
                   var iv = $.base64.encode(txt.substr(0, 16));
                   var temp_txt = $.base64.encode(txt.substr(16));
                   var message = CryptoJS.format.OpenSSL.parse(temp_txt);
                   var decrypted = CryptoJS.AES.decrypt(message, CryptoJS.enc.Base64.parse(key), { iv:CryptoJS.enc.Base64.parse(iv), format: CryptoJS.format.OpenSSL});
                   document.writeln(decrypted.toString(CryptoJS.enc.Utf8));


 

 

先讲一下CI中的Encrytion类的加密处理。

在刚刚的示例中,调用Encrytion的encrypt方法时,做了下面几件事(因为我执行时手工配置了参数,只加密,不生成hash,因此略过了该步骤)。

1 生成一个随机的$iv向量。

2 调用openssl_encrypt()方法加密,得到加密结果$data。

3 返回base64_encode($iv.$data)。

 

我自己写了一段代码表示以上过程,如下:

                   $raw_txt = '这是用来测试的文本';
                   $key= openssl_random_pseudo_bytes(32); //随机生成一个32字节的key
                   $iv= openssl_random_pseudo_bytes(16); //随机生成一个16字节的 iv向量
 
                   $method= 'aes-256-cbc';
                   $encrypted_txt= openssl_encrypt($raw_txt, $method, $key, 1, $iv);
                   $data= base64_encode($iv.$encrypted_txt);


然后,就可以用Encrytion类解密了。

                   $this->load->library('encryption');
                   $decrypted_txt= $this->encryption->decrypt($data, ['cipher' => 'aes-256', 'mode'=> 'cbc', 'key' => $key, 'hmac' => false, 'raw_data' => false]);
                  
                   assert($raw_txt== $decrypted_txt);


 

注意到在调用openssl_encrypt函数时的第4个参数,默认情况下这个参数是0,表示将结果用base64编码输出,这里为1,表示不进行编码。也就是

openssl_encrypt($raw_txt, $method, $key, 0,$iv) 等于base64_encode(openssl_encrypt($raw_txt, $method, $key, 1, $iv)

 

在使用cryptojs解码时,需要iv向量,所以我们要做下面这些事:

1 得到key和Encrytion->encrypt的输出data

2 分离data,得到iv和openssl加密后的文本

3 调用CryptoJS中的方法进行解密,得到文本

 

我将这几个文件一起打包上传了,使用的时候注意将文件放入正确的位置,并更改js文件的引用路径。


地址在这里  http://download.csdn.net/download/scorper/9538184

AES-CBC加密 以及PHP C#实现

折腾了好多天, 感谢乔楚大侠的帮忙, 终于搞定了 AES - CBC 加密, 特地将加密部分的东西整理一下, 希望能给后人带来一些帮助     【加密规范】:             加密...
  • xfnjlove
  • xfnjlove
  • 2014年09月11日 15:15
  • 1980

javascript实现AES加密解密(ECB&CBC)

在线验证地址: www.seacha.com npm install crypto-js —save-dev javascrit 代码如下: var CryptoJS = require("crypt...
  • wk3368
  • wk3368
  • 2017年06月06日 11:47
  • 1422

使用Openssl的AES加密算法

转自:http://www.thinkemb.com/wordpress/?p=18 在网络应用的信息安全是基于密码学的,所以如果想做安全方面的邻域需要有一定的密码学基础。当然最好的学习方法...
  • yasi_xi
  • yasi_xi
  • 2013年11月01日 10:44
  • 42368

CryptoJS中AES256(CBC)加密算法简单使用

1.CryptoJS脚本下载 下载地址:http://pan.baidu.com/s/1slwHVLb2.简单使用未完
  • z834410038
  • z834410038
  • 2017年04月18日 19:13
  • 4583

CryptoJS实现AES加密

CryptoJS实现AES加密最近在做一个项目,考虑到数据的安全性,我们要给数据在传输过程中加密,防止一些恶意的操作以及爬虫抓取数据。 用到的库:CryptoJS 官方地址:https://code....
  • its_my_dream
  • its_my_dream
  • 2016年11月05日 00:23
  • 4495

JavaScript加密库Crypto-JS的使用

先来图片一张,看看效果(一个采用Crypto-JS实现的工具展示): CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。目前已支持的算法包括: MD...
  • wangcunhuazi
  • wangcunhuazi
  • 2014年11月25日 21:51
  • 15670

cryptojs aes 加密 解密

最近在做微信公众号开发,在与后台的交互中,需要用到 aes,期间也碰到一些问题,在此分享一下自己踩过的坑。使用cryptojs,这样一个库。 与后台的交互,首先需要确定后台 aes 采用的算法,我的项...
  • on_the_way_to_travel
  • on_the_way_to_travel
  • 2016年03月17日 13:39
  • 4401

可互操作的Java和JavaScript AES/128/192/256加密算法代码

  • 2011年05月06日 18:45
  • 28KB
  • 下载

加/解密系列(三)-前端加密JS库--CryptoJS

效果如图(一个采用Crypto-JS实现的工具展示): CryptoJS (crypto.js) 为 JavaScript 提供了各种各样的加密算法。目前已支持的算法包括: MD5 SHA-...
  • cs2425244259
  • cs2425244259
  • 2016年05月19日 18:28
  • 2645

PHP AES256加密算法

aes.class.php
  • fdipzone
  • fdipzone
  • 2012年11月13日 15:59
  • 5462
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CI加密,cryptojs解密, 使用aes-256-cbc
举报原因:
原因补充:

(最多只允许输入30个字)