我有一个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以外的东西加密字符串/对象,因为我不想在VueJS应用程序中存储该值。密钥不需要超级安全,但我宁愿不使用LARAVEL_APP_KEY
根据我的经验,我建议如下。
首先,我不确定您为什么要加密服务器上的数据然后在客户端解密。我能看到的唯一好处是防止MITM攻击,在这种情况下你应该使用SSL。
其次,我很确定加密密钥是前缀base64:
之后的base64编码值。因此,在尝试使用密钥解密之前,您需要删除它,然后base64编码VueJS中的剩余字符串。
在回答有关使用除APP_KEY以外的任何内容进行加密/解密的问题时,您不能拥有多个将解密相同值的密钥。只有拥有正确的密钥才能使用密码术。
我真的不建议在客户端解密数据,任何人都可以获得加密密钥,如果其他地方有漏洞并能够访问您的数据库,他们可以解密他们喜欢的任何数据。