Encriptación/Desencriptación en Flutter adaptando código en Java
Estoy tratando de crear una aplicación en Flutter y el código de ejemplo que tengo está en Java.
Aquí está el código de ejemplo en Java:
https://gist.github.com/kapiljhajhria/72a22ff75e238878f539f7bb21026208
y aquí está mi código de Flutter:
https://gist.github.com/kapiljhajhria/795d1a7c7cf1c76ca8e327bf8b2f51de
Aquí hay un breve resumen de lo que estoy haciendo:
1. Generar una clave de sesión única: Clave aleatoria AES 256 bits.
2. Encriptar los datos JSON utilizando la clave de sesión del paso 1.
3. Generar el hash SHA256 de los datos JSON.
4. Encriptar el hash generado en el paso 3 utilizando la clave de sesión del paso 1.
5. Encriptar la clave de sesión utilizando la clave pública. La clave pública se proporciona como un archivo certificate.cer. Copié el valor de cadena y lo agregué a la clase como una constante para que sea más fácil de usar. No estoy seguro si este fue el mejor enfoque.
6. Creé una solicitud POST con 3 parámetros, tal como se muestra en el código Java. Creo que estoy haciendo esta parte correctamente.
7. La respuesta que obtendré estará encriptada utilizando la clave de sesión del paso 1. Por lo tanto, tendré que desencriptar esos datos de respuesta. Aún no he llegado a este paso.
No tengo acceso al servidor donde se realiza esta solicitud.
Dado que la solicitud POST se realiza utilizando una vista web, no puedo encontrar una forma de obtener errores adecuados de mi solicitud. Todo lo que obtengo es una página web que dice “Solicitud inválida”.
Entonces, mi primera suposición es que no estoy utilizando correctamente la clave pública para encriptar mi clave de sesión.
Si esa parte es correcta, entonces no estoy encriptando los datos correctamente o mi método de encriptación no coincide con los métodos de encriptación utilizados en el código Java. Tal vez la clave de sesión que estoy generando no es correcta.
Cualquier ayuda sería muy apreciada. Gracias. Si necesitas algo de mí, por favor házmelo saber.
davy.ai
Solución
Parece que el código de Flutter que has compartido no está completo, ya que no incluye las funciones de encriptación y desencriptación utilizadas en el código de Java. Para solucionar el problema de por qué tu solicitud está fallando, debes intentar capturar la solicitud enviada desde el WebView y compararla con la solicitud enviada desde el código de Java. Puedes utilizar herramientas como Charles Proxy, Wireshark o Fiddler para capturar las solicitudes.
Sin embargo, aquí hay algunas sugerencias que podrían ayudarte:
Una vez que hayas capturado la solicitud y la hayas comparado con el código de Java, deberías poder identificar el problema exacto y solucionarlo adecuadamente.