gpt4 book ai didi

javascript - Laravel 中的 Crypt Decrypt react native 错误

转载 作者:行者123 更新时间:2023-12-04 14:47:49 34 4
gpt4 key购买 nike

我正在使用 reactnative 和 laravel 创建一个应用程序,

所以我在 laravel 中的代码正在创建一个带有加密数据的二维码并将其发送到我的前端 (Reactjs),

当我尝试使用 Crypto js 在 React Native 中解密时,它添加了一些我没有添加到后端的特征,

我会展示所有的功能和例子,

//laravel中的代码加密我的二维码信息

 $unix =time();     
$unix_hashed = Crypt::encrypt($unix);
return QrCode::size(100)->generate($unix_hashed);

//React Native 中的代码与用于解密的 cryptojs

var key = '6AhFLqwlExB9tn2Twql62EtbFDqBEv+S7tXW3h6a/0o=';
let encrypted = atob(data);
encrypted = JSON.parse(encrypted);
const iv = CryptoJS.enc.Base64.parse(encrypted.iv);
const value = encrypted.value;
key = CryptoJS.enc.Base64.parse(key);
var decrypted = CryptoJS.AES.decrypt(value, key, {
iv: iv
});
decrypted = decrypted.toString(CryptoJS.enc.Utf8);

//控制台输出示例:

this is my output

但问题应该是这样的:

i:1634986874;

""& i & : & ;是额外的

谁能帮帮我

谢谢

最佳答案

Crypt::encrypt() 默认在 CBC 模式下使用 AES-256,s。 here .

加密前,调用PHP函数serialize()将明文序列化生成值的可存储表示。例如,serialize(1635015182) 返回 i:1635015182;serialize('Hello world') 返回 s:11: " Hello World ”;。序列化数据中,i表示一个整数,s:11表示一个11个字符的字符串。

如果使用Crypt::decrypt() 执行解密,unserialize()解密后调用,反序列化数据,恢复原始明文。

使用其他库解密时,如CryptoJS,不进行反序列化,返回序列化后的明文。因此,反序列化必须在此处手动完成。

幸运的是,有 locutus为 JavaScript 提供 PHP 功能端口的库,因此 unserialize() 也可以在 JavaScript/NodeJS 下毫不费力地执行:

var CryptoJS = require('crypto-js');
var atob = require('atob');
var unserialize = require('locutus/php/var/unserialize')

// ciphertext from Crypt::encrypt()
var data = "eyJpdiI6IkYyaDhxenFJM0FjaW56TW83NkpuNHc9PSIsInZhbHVlIjoiNzhSeUs5em1WblpaRWk2OVBWVURnUT09IiwibWFjIjoiODg1NGFkOTk0MGVjMjIxODAyNzExOTgxYjhiMDM4YjliMmM5NzE5Mjc0YzFmNDVlMWU1MWRkMTQ2N2Q5ODdmNCJ9"

var key = '6AhFLqwlExB9tn2Twql62EtbFDqBEv+S7tXW3h6a/0o=';
let encrypted = atob(data);
encrypted = JSON.parse(encrypted);
const iv = CryptoJS.enc.Base64.parse(encrypted.iv);
const value = encrypted.value;
key = CryptoJS.enc.Base64.parse(key);
var decrypted = CryptoJS.AES.decrypt(value, key, {
iv: iv
});
decrypted = decrypted.toString(CryptoJS.enc.Utf8);

// unserialize
console.log(decrypted); // i:1635015182;
console.log(unserialize(decrypted)); // 1635015182

最后一行的 unserialize() 调用恢复了原始明文。


请注意,encrypted.mac 包含用于检查数据完整性的 MAC。 Here您可以找到 Crypt::encrypt() 的 PHP 实现。

关于javascript - Laravel 中的 Crypt Decrypt react native 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69687685/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com