[英]Encrypt Object via Laravel 5.7 PHP and Decrypt via VueJS Javascript
我有一个 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
根据我的经验,我建议如下。
首先,我不确定您为什么要在服务器上加密数据,然后在客户端解密。 我能看到的唯一好处是防止 MITM 攻击,在这种情况下,您应该使用 SSL。
其次,我相当确定加密密钥是前缀base64:
之后的 base64 编码值。 因此,在尝试使用密钥解密之前,您需要删除它,然后在 VueJS 中对剩余的字符串进行 base64 编码。
在回答您关于使用 APP_KEY 以外的任何内容进行加密/解密的问题时,您不能有多个密钥来解密相同的值。 密码学只有在您拥有正确的密钥时才有效。
我真的不建议在客户端解密数据,然后任何人都可以获得您的加密密钥,如果其他地方存在漏洞并且能够访问您的数据库,他们可以解密他们喜欢的任何数据。
这是从 Laravel 加密并使用 vueJS 解密的示例
Laravel
use Illuminate\Support\Facades\Crypt;
public function encrypting(){
$string = 'This is example text';
$user = User::get();
// for simple string
$encrypted = Crypt::encryptString($string);
// for array , object
$encrypted2 = Crypt::encryptString(json_encode($user));
$response = [
'user' => $user,
'encrypted' => $encrypted,
'encrypted2' => $encrypted2
];
}
动作前端服务器
npm install crypto-js
VueJS
关键是在.ENV(laravel),但删除“Base64编码”文本APP_KEY:
import CryptoJS from "crypto-js";
Decrypting() {
axios.get('http://back.domain.com/encrypting').then(response => {
this.user = response.data.user;
this.stringEncrypte = response.data.encrypted;
this.userEncrypte = response.data.encrypted2;
var key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx='
var encrypted_json = JSON.parse(atob(this.userEncrypte));
var decrypted = CryptoJS.AES.decrypt(encrypted_json.value, CryptoJS.enc.Base64.parse(key), {
iv: CryptoJS.enc.Base64.parse(encrypted_json.iv)
});
// Decrypt in string format
this.stringDecrypted = decrypted.toString(CryptoJS.enc.Utf8);
// Decrypt in Array, Object format
this.userDecrypted = JSON.parse(decrypted.toString(CryptoJS.enc.Utf8));
})
},
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.