Colección de citas famosas - Slogan de motivación - El servicio web RSA de Android y Java se maneja de forma diferente.

El servicio web RSA de Android y Java se maneja de forma diferente.

1. Recientemente, el cifrado RSA se utiliza para mejorar la seguridad de la transmisión de datos entre el cliente y el servidor de Android (JavaEE). Se descubrió que la contraseña generada en la máquina Android (el par de claves lo genera el servidor en Windows XP y la clave pública se envía al cliente para su almacenamiento) no puede ser descifrada por la clave privada en el servidor.

2. Para las pruebas, el cifrado y descifrado local en el servidor es normal, y el cifrado y descifrado en Android son normales. Sin embargo, la contraseña cifrada en el servidor (usando la misma clave pública) no se puede descifrar. el sistema Android (usando la misma clave privada).

3. Como no entiendo el algoritmo de cifrado RSA ni el proceso de cifrado de Java RSA, entiendo que la longitud de los caracteres de relleno durante el proceso de cifrado puede ser diferente, lo cual está relacionado con el Algoritmo RSA especificado durante el cifrado y descifrado.

4. Por ejemplo, utilice RSA estándar para cifrar con la clave pública en la máquina A y luego utilice "RSA/ECB/NoPadding" para descifrar con la clave privada en el sistema B. El resultado se puede descifrar, pero encontrará que hay muchos caracteres especiales delante del texto original descifrado, que son caracteres nulos completados antes del cifrado. Si el algoritmo RSA estándar todavía se usa para descifrar en el sistema B, entonces, por supuesto, en el sistema B; El mismo tipo de entorno de máquina virtual JDK es exactamente el mismo. El punto clave es que la máquina virtual (dalvik) utilizada en el sistema Android es diferente del JDK estándar de SUN, y su implementación RSA predeterminada también es diferente.

5. Para decirlo más claramente, al cifrar el "abc" original, se utilizan directamente los bytes obtenidos por "abc". La longitud del método getBytes() puede ser solo 3, pero el sistema primero lo coloca en una matriz de bytes de 512 bits, nuevo byte [512], y luego lo cifra. Pero utiliza la "contraseña de cifrado" al descifrar. getBytes() para descifrarlo. El texto original descifrado tiene naturalmente 512 datos de longitud, es decir, más de 500 bytes están llenos de otros caracteres vacíos excepto "abc".