通过Laravel 5.7 PHP和Decrypt通过VueJS Javascript加密对象

问题描述 投票:1回答:1

我有一个Laravel 5.7应用程序,它加密一个对象并将加密的对象返回给我的VueJS应用程序。

请注意下面的代码是出于解释目的,我不是以这种方式使用,但是,概念是。

由路线触发的Laravel功能

public function license() {
  var data = [{id: 1}, {expiry_date: '2019-02-25T10:47:12+00:00'}];
  $encrypted = \Crypt::encrypt(JSON.stringify(data));
  return $encrypted;
}

用于检索对象的Vue JS方法

checkLicense() {
      this.$http.get(LARAVEL_ROUTE).then(res => {
        var key = 'LARAVEL_APP_KEY'; // NOT REAL
        var bytes = CryptoJS.AES.decrypt(res.data, 'LARAVEL_APP_KEY');
        var plaintext = bytes.toString(CryptoJS.enc.Utf8);
      });
}

以上产生以下内容:

未捕获(承诺)错误:格式错误的UTF-8数据

我试过的事情:

  • 我检查了LARAVEL_APP_KEY,我可以看到它的前缀为'base64:',所以我尝试从我的VueJS方法中删除它,我声明了密钥,但这没有任何区别。
  • 我还删除了该对象,并尝试加密一个产生与上面相同结果的字符串。

附加问题:

我还想用LARAVEL_APP_KEY以外的东西加密字符串/对象,因为我不想在VueJS应用程序中存储该值。密钥不需要超级安全,但我宁愿不使用LARAVEL_APP_KEY

javascript php laravel encryption cryptojs
1个回答
2
投票

根据我的经验,我建议如下。

首先,我不确定您为什么要加密服务器上的数据然后在客户端解密。我能看到的唯一好处是防止MITM攻击,在这种情况下你应该使用SSL。

其次,我很确定加密密钥是前缀base64:之后的base64编码值。因此,在尝试使用密钥解密之前,您需要删除它,然后base64编码VueJS中的剩余字符串。

在回答有关使用除APP_KEY以外的任何内容进行加密/解密的问题时,您不能拥有多个将解密相同值的密钥。只有拥有正确的密钥才能使用密码术。

我真的不建议在客户端解密数据,任何人都可以获得加密密钥,如果其他地方有漏洞并能够访问您的数据库,他们可以解密他们喜欢的任何数据。

© www.soinside.com 2019 - 2024. All rights reserved.