【发布时间】:2019-07-18 18:28:10
【问题描述】:
我有一个 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
【问题讨论】:
-
看看here
-
感谢工作!现在只需要弄清楚如何使用与 LARAVEL_APP_KEY 不同的密钥进行加密。 - 谢谢!
-
请注意,当您执行此操作时,客户端将收到加密密钥,这意味着任何收到该密钥的用户都可以解密具有相同密钥的所有个加密字符串。如果您想这样做,请为每个用户生成一个随机加密密钥并将其存储在数据库中。
-
谢谢@apokryfos
标签: javascript php laravel encryption cryptojs