• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

254
Views
Cripta en laravel Descifrar en reaccionar error nativo

Estoy creando una aplicación con reactnative y laravel,

entonces mi código en laravel está creando un código Qr con datos encriptados y enviándolo a mi interfaz (Reactjs),

Cuando intento descifrar en reaccionar nativo usando Crypto js, agrega algunas características que no agregué en mi back-end,

Mostraré todas las funciones y ejemplos,

//Código en laravel crypt mi información QR

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

// Código en reaccionar nativo con cryptojs para el descifrado

 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);

// ejemplo de la salida en la consola:

esta es mi salida

pero el problema debería ser así:

yo:1634986874;

el " " & yo & : & ; es extra

Alguien me puede ayudar

Gracias

almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Crypt::encrypt() usa AES-256 en modo CBC por defecto, s. aquí

Antes del cifrado, el texto sin formato se serializa llamando a la función de PHP serialize() generando una representación almacenable del valor. Por ejemplo, serialize(1635015182) devuelve i:1635015182; y serialize('Hello world') devuelve s:11: "Hello world"; . En los datos serializados, i denota un número entero, s:11 denota una cadena de 11 caracteres.

Si el descifrado se realiza con Crypt::decrypt() , se llama a unserialize() después del descifrado, que deserializa los datos y restaura el texto sin formato original.

Al descifrar con otra biblioteca, como CryptoJS, la deserialización no se realiza, por lo que se devuelven los textos sin formato serializados. Por lo tanto, la deserialización debe hacerse manualmente aquí.

Afortunadamente, existe la biblioteca locutus que proporciona puertos de funcionalidades de PHP a JavaScript, por lo que unserialize() también se puede ejecutar bajo JavaScript/NodeJS sin mucho esfuerzo:

 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

La llamada unserialize() en la última línea restaura el texto sin formato original.


Tenga en cuenta que encrypted.mac contiene un MAC para verificar la integridad de los datos. Aquí puede encontrar una implementación de PHP para Crypt::encrypt() .

almost 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error