2015-11-03 150 views
-3

该函数将接收一个上传的文件,并将加密这一个保存在服务器中,我想用openssl_encrypt。在PHP中加密和JS解密 - AES256

加密类型将是AES256。

之后,当请求一个web服务时,将返回一个基本的64位加密文件,使用crypto-js在JS端进行解密。

对于知道,我的问题是我如何使用openssl_encrypt php函数来执行加密过程?

加密过程:

  1. 的fopen
  2. 加密
  3. 编码的base64
  4. fwrite的
  5. FCLOSE

解密过程:

  1. 解码基地64
  2. 解密
  3. 打开PDF文档上面

的过程,是思想,我有想法,请纠正我,如果我错了或者是有错误的。

第1阶段:

PHP代码:

处理后的文件:

$encryptionMethod = "AES-256-CBC"; 
$secret = "[email protected]@@@@@@@@@123456789012"; //must be 32 char length 
$iv = substr($secret, 0, 16); 
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secret,0,$iv); 

jQuery的解密不起作用:

var ckey = "[email protected]@@@@@@@@@123456789012"; 
var decrypted = CryptoJS.AES.decrypt(data.content, ckey, { iv: "[email protected]@@@@@" }); 

p df再次生成,但我无法打开,显示错误消息“Acrobat无法打开文件”..

为什么我得到这个?

+0

好了,问题已经投票了,但没有人说为什么!有点奇怪! – Bruno

+2

这可能是因为你没有展示你尝试过的东西而被低估的。到目前为止,你已经做了一些研究(这很清楚),但你还没有真正尝试过。先尝试,然后问一个问题,如果你有一个特定的问题。 – samlev

+0

我的问题要知道,是否可以用openssl函数进行AES256加密并使用cryptojs进行解密? – Bruno

回答

0

加密/解密工作!

PHP端加密

$encryptionMethod = "AES-256-CBC"; 
$secret = "[email protected]@@@@@@@@@123456789012"; //must be 32 char length 
$iv = substr($secret, 0, 16); 
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secret,0,$iv);` 

CRYPTOJS解密

var cipherParams = CryptoJS.lib.CipherParams.create({ciphertext: CryptoJS.enc.Hex.parse(data.toString())}); 
var decrypted = CryptoJS.AES.decrypt(cipherParams, CryptoJS.enc.Hex.parse(key), { iv: CryptoJS.enc.Hex.parse(iv) }); 
window.open("data:application/pdf;base64, " + btoa(decrypted.toString(CryptoJS.enc.Utf8))); 
+0

好!我向我要求的问题添加了解决方案,并在我的问题中得到了一个投票!令人难以置信的是,这里的人们如何投票,甚至不检查整个帖子! – Bruno

+0

这不是很直观。什么是你在JavaScript中使用的“数据”,“键”和“四”变量?请解释。 –