使用 mcrypt 时 JSON.parse 不起作用

Posted

技术标签:

【中文标题】使用 mcrypt 时 JSON.parse 不起作用【英文标题】:JSON.parse is not working while using mcrypt 【发布时间】:2014-10-04 23:07:46 【问题描述】:

我正在尝试使用 mcrypt 并加密和解密跨域的 json 数据。实际上,当我在同一个域中使用加密时,这有效,但在 ajax 中无效。

Here is function all:
function all($contentType = 'page') 
    $secret_key = "12345678911234567892123456789312";
    $this->load->database();
    $query = $this->db->query(
       "SELECT * FROM category"
    );
$buffer = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $secret_key, json_encode($result),       MCRYPT_MODE_ECB);
$this->output->set_output(base64_encode($buffer));

Here is file of view: 
$(function()
  try 
    $.ajax(
    type: "GET",
    url: "http://localhost:8888/DIY/index.php/user/all/json",
    crossDomain: true,
    contentType: "application/x-www-form-urlencoded",
    async: false,
    dataType: 'text',
    processData: false,
    cache: false,
    success: function (response) 
        var a = mcrypt.Decrypt($.base64('decode', response ));
        console.log(  JSON.parse(a) );
    ,
    error: function (ErrorResponse) 
        console.log('error');
    
);

catch (error) 

);

The output in Chrome is:
["id":"1","EMAIL":"sda@q.com","PHONE":"sdsng","USERNAME":"12das","FIRST_NAME":null,"LAST_NAME":null,"PASSWORD":"","TYPE":null,"id":"2","EMAIL":"adas","PHONE":"dsada","USERNAME":"asdasd","FIRST_NAME":null,"LAST_NAME":null,"PASSWORD":"","TYPE":null] 

如果我在视图文件中添加 JSON.parse(a),它不会显示任何内容。但是,我在Chrome中得到console.log(a)后,直接将输出数据复制为参数,在Chrome控制台中使用

JSON.parse('["id":"1","EMAIL":"139520519@qq.com","PHONE":"yang_zhang","USERNAME":"122545929","FIRST_NAME":null,"LAST_NAME":null,"PASSWORD":"","TYPE":null,"id":"2","EMAIL":"adas","PHONE":"dsada","USERNAME":"asdasd","FIRST_NAME":null,"LAST_NAME":null,"PASSWORD":"","TYPE":null]')
[Object, Object]

输出就是我要找的!!!谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

现在解决了。我将 mcrypt 的模式从 ecb 更改为 cfb,并将 IV 传递到不同的域。然后使用传递的 IV 解密数据将得到可以使用 JSON.parse() 获取预期 json 对象的字符串

【讨论】:

以上是关于使用 mcrypt 时 JSON.parse 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

JSON.parse() 在 Worklight 混合适配器中不起作用

JSON.parse() 在 Linux 和 Mac 上不起作用

Mcrypt解密不起作用 - PHP

将 mcrypt AESencrypt 函数转换为 openssl 但不起作用

使用 JSON.parse 方法解析数据时 JSON 中位置 0 错误的意外令牌'

必须加载 php 扩展 mcrypt