Criptografía (1): texto largo de cifrado RSA

Introducción:

Introducción a RSA: El cifrado RSA es un tipo de cifrado asimétrico. En cuanto a su implementación subyacente, es más complicado. Para ser honesto, no puedo decirle que puede llevarlo a una zanja. Los estudiantes interesados ​​pueden visitar este blog. publicación: haga clic aquí , o Es más fácil de entender mirando los cómics: Haga clic aquí Hoy no estamos hablando de su principio de implementación. No está permitido usar RSA para cifrar textos largos a la vez. Nuestro enfoque hoy es usar ¡para encriptar textos largos! ! !

Composición RSA:

RSA es un par de claves que consta de una clave pública y una clave privada. La clave se divide en una clave pública y una clave privada. La clave pública es pública y la clave privada se mantiene por sí misma. La clave privada se utiliza para el cifrado. El contenido cifrado se denomina texto cifrado, la clave pública la utilizan otros para descifrar su texto cifrado y el contenido descifrado se denomina texto sin formato.

texto:

1. Genere el código clave:

from Cryptodome.PublicKey import RSA


# 生成密钥
rsa = RSA.generate(1024)
print(rsa.export_key())
print(rsa.publickey().export_key())
with open('pri.bin', mode='wb') as f:
    f.write(rsa.export_key())
with open('pub.pem', mode='wb') as f:
    f.write(rsa.publickey().export_key())

Clave privada: Clave
inserte la descripción de la imagen aquí
pública:
inserte la descripción de la imagen aquí
Descripción:
Primero hablemos del código. La lógica general del código es generar un par de claves y guardarlo. Recuerde que las claves RSA aparecen en pares. RSA.generate(1024) en el código es el clave, y la siguiente El 1024 es una unidad de bits, puede ir a ver las instrucciones en el código fuente. Hablemos de la clave pública y la clave privada. El comienzo de la clave se puede utilizar para distinguir la clave pública de la clave privada. Ver las dos figuras de arriba.

2. Código de cifrado:

from Cryptodome.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64


text = '一只快死的猿'
# 加载秘钥
pub_key = open('pub.pem').read()
# 实例化一个秘钥对象
key = RSA.import_key(pub_key)
# 生成加密对象
cipher = PKCS1_v1_5.new(key)
# 加密
encode_rsa_data = cipher.encrypt(text.encode())
# 解码
b64_data = base64.b64encode(encode_rsa_data)
print(b64_data.decode())

Descripción:
Texto cifrado cifrado: ETWDk+DngrXX2OoK6cusKZ90oLX3l1NcTFwfkrafSvs5OBjMDygCVo+Weiemy+5ORxJ2j8PXb8JEU3fQjO8UuF1edpTA8ZJ/8z9RY90I7tl3Cixp77yG/ml8anNn8FJwoUsa6aSGMOnQqEQLxp

El texto cifrado es un montón de caracteres ilegibles, y no importa si no lo entiende. Lo importante es mirar el "=" al final. En primer lugar, debe saber que los 1024 bits especificados cuando generó la clave funciona en este lugar. En este momento, la longitud del texto cifrado El valor fijo es 172. Si el texto cifrado es de 2048 bits, entonces el grado del texto cifrado se fija en 344. Puede probar más para encontrar su regularidad Mirando hacia atrás en "=", si el texto cifrado encriptado no es lo suficientemente largo Si es 172, entonces agregará "=" al final hasta la longitud de 172, razón por la cual el texto cifrado es fijo.

Hablemos del código: el punto a tener en cuenta es que la codificación b64 debe realizarse antes del cifrado de texto sin formato.

3. Código de descifrado:

from Cryptodome.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64


text = 'thTmi5mFXjtj3LSXO825EUtKOa6Tr03kVmCcSmS/LfJNtYxQ9xXeRar0Glr2p1FVQjITd0CoT8cQbZhyQjg05JCbso7YPi6M79o0UI9bfbZwEGJeh+En7mez1gJuJmA1jDUor0v38dudbvFZSm5ibi/mWsPFc+1KPJIBZMkX8Tk='
# 加载秘钥
pri_key = open('pri.bin').read()
# 实例化一个秘钥对象
key = RSA.import_key(pri_key)
data = base64.b64decode(text.encode())
# 生成解密对象
rsa = PKCS1_v1_5.new(key)
decode_rsa_data = rsa.decrypt(data, b'rsa')
print(decode_rsa_data.decode())

Nota: El texto sin formato descifrado es "un simio moribundo". El objetivo del código es realizar la decodificación b64. Aquí, debe tenerse en cuenta que el cifrado y la decodificación deben ser procesados ​​por B64 antes de que se puedan realizar el cifrado y el descifrado.

Expansión clave: bien, la operación básica de RSA se terminó arriba, y luego entramos en nuestro enfoque hoy, ¡encriptar textos largos con RSA!

Se han mencionado varios puntos clave antes:
1. Al generar la clave, especifique la longitud de la clave como 1024, 2048 ...
2. RSA solo puede cifrar texto breve, como nuestro request_id, token o algunos identificadores importantes, porque es relativamente corto, pero quiero explicar aquí, no he estudiado la longitud máxima de texto que puede cifrar.
3. En correspondencia con la ley de la longitud del texto cifrado generado, los 172 y 344 mencionados anteriormente
son la lógica de cómo usar RSA para cifrar textos largos: de hecho, el texto largo se divide en pequeñas cadenas, y luego el cifrado, esta es una actividad técnica, es necesario encontrar la ley de su encriptación, ¿cómo cortarla para cumplir con las reglas?

La siguiente es una pequeña demostración que escribí antes para lidiar con textos largos. Sin más preámbulos, vaya directamente al código fuente. Hay instrucciones específicas en el código:
Haga clic aquí para descargar el código
. Lo anterior es mi dirección de github. El código ha sido subido. Si te interesa, puedes leerlo.

Conclusión: El tiempo de aprendizaje feliz siempre es corto, y este es el final del contenido de hoy. Si esta publicación de blog es útil para usted o cree que tiene una mejor comprensión del cifrado RSA, entonces no sea tacaño con su tres enlaces de un clic , y github recuerda que todas las cosas buenas están en él, y yo lo compartiré cuando tenga tiempo. Otro cifrado ha~~~~

Supongo que te gusta

Origin blog.csdn.net/xiaoxin_OK/article/details/116209322
Recomendado
Clasificación