Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

340
Visualizações
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

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

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() .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda