Red de conocimiento informático - Aprendizaje de código fuente - Estudio de caso de firma digital

Estudio de caso de firma digital

La transmisión de datos en red suele utilizar algoritmos de cifrado simétrico

Debido a problemas de eficiencia, los algoritmos de cifrado asimétrico solo se utilizan para cifrar las claves secretas de los algoritmos de cifrado simétrico y para firmas digitales

Antes de la operación, el servidor y el cliente tienen las claves públicas de ambas partes

La clave pública RSA de Android --gt se envía al servidor para su uso

Si el cliente autentica el servidor Para garantizar la autenticidad, la clave pública RSA del cliente Android se envía al cliente para su uso. p> Clave pública RSA del servidor --gt; enviada al cliente para su uso

Por ejemplo, el cliente verifica la autenticidad del servidor

Cliente Android (usando la clave AES)

Utiliza un algoritmo de cifrado asimétrico, es decir, la clave pública RSA del servidor a la clave AES de Android. Cifre la clave AES del cliente Android

Luego envíe una solicitud Http Get y envíe la clave AES del cliente Android al servidor

Después de que el servidor recibe la solicitud, utiliza su propio RSA El privado La clave descifra la solicitud. Obtenga la clave AES de Android y luego firme los datos (como los datos del byte []) enviados al cliente de Android

Utilice la clave AES de Android para cifrar la firma y los datos, y luego envíelos a Android El cliente realiza cifrado. Cifrar y luego enviar al cliente de Android

Después de recibirlo, el cliente de Android usa su propia clave AES para descifrar todo el paquete de datos, luego separa los datos, obtiene la firma y los datos, luego verifica la firma. y usos La clave pública del servidor se utiliza para la verificación. La clave pública se utiliza junto con el parámetro sign para la verificación de la firma

La clave privada RSA del servidor se utiliza para firmar el signo porque la longitud del signo es fija (igual a la longitud de la clave de inicialización). , Es fácil separar los datos

p>

Por ejemplo, str.substring () descifrado puede separar datos y firmar