Presentar los conceptos básicos del algoritmo de cifrado AES

No digas tonterías, ¡adelante!
Primero mire la dirección de acceso URL cifrada

Introduce instrucciones de cifrado, ¡Baidu lo sabe!

AES

AES, Advanced Encryption Standard (en inglés: Advanced Encryption Standard, abreviatura: AES), también conocido como cifrado Rijndael en criptografía, es un estándar de cifrado en bloque adoptado por el gobierno federal de EE. UU. Este estándar se usa para reemplazar el DES original, ha sido analizado por muchas partes y se usa ampliamente en todo el mundo. Estrictamente hablando, el cifrado AES y Rijndael no son exactamente lo mismo (aunque los dos son intercambiables en aplicaciones prácticas), porque el cifrado Rijndael puede admitir una gama más amplia de bloques y longitudes de clave: la longitud de bloque de AES se fija como 128 bits, la longitud de la clave puede ser de 128, 192 o 256 bits; la longitud de la clave y del bloque utilizada por Rijndael puede ser un múltiplo entero de 32 bits, con 128 bits como límite inferior y 256 bits como límite superior. Incluyendo AES-ECB, AES-CBC, AES-CTR, AES-OFB, AES-CFB

Texto sin formato

Se refiere a texto (o cadena) sin cifrar, lo que significa que la mayoría de la gente puede entender, perteneciente a términos criptográficos. [1] En un sistema de comunicación, puede ser un flujo de bits, como texto, mapa de bits, voz digitalizada o imagen de video digitalizada. En general, puede pensar en el texto sin formato como un carácter significativo o un conjunto de bits, o un mensaje que se puede obtener a través de un determinado estándar de codificación público. Una vez que funciona cierto algoritmo de cifrado, el texto que sigue a la función se denomina texto cifrado. Para el texto cifrado, si desea obtener el texto sin formato, debe descifrarlo mediante el algoritmo de descifrado correspondiente al algoritmo de cifrado para recuperar el texto sin formato.

Llave

La contraseña utilizada para cifrar el texto sin formato (la misma clave se utiliza para el cifrado y descifrado en cifrado simétrico)

Transferencia de claves

No se puede transmitir directamente en la red; de lo contrario, se filtrará la clave. Por lo general, la clave se cifra mediante un algoritmo de cifrado asimétrico y luego se transmite a la otra parte a través de la red, o la clave se discute directamente cara a cara. La clave no debe filtrarse, de lo contrario, el atacante restaurará el texto cifrado y robará datos confidenciales.

Función de encriptación

Suponga que la función de cifrado AES es E, luego C = E (K, P), donde P es el texto sin formato, K es la clave y C es el texto cifrado. En otras palabras, si el texto plano P y la clave K se introducen como parámetros de la función de cifrado, la función de cifrado E generará el texto cifrado C

Función de descifrado

Supongamos que la función de descifrado AES es D, luego P = D (K, C), donde C es el texto cifrado, K es la clave y P es el texto sin formato. En otras palabras, si el texto cifrado C y la clave K se ingresan como parámetros de la función de descifrado, la función de descifrado generará el texto sin formato P

Fuente de texto cifrado

Probablemente significa los datos procesados ​​por la función de cifrado

¡Finalmente, probemos el código!
Encontré un problema de Cryptodome, la solución es la siguiente para
resolver el problema de que Crypto no se carga

from Cryptodome.Cipher import AES
import base64


BLOCK_SIZE = 16  # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \
                chr(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]


def Encrypt(key, data):
    """
       AES长度为:32, 48, or 64,
    """
    key = key.encode('utf8')
    data = pad(data)
    cipher = AES.new(key, AES.MODE_ECB)
    # 加密后得到的是bytes类型的数据,使用Base64进行编码,返回byte字符串
    result = cipher.encrypt(data.encode())
    encodestrs = base64.b64encode(result)
    enctext = encodestrs.decode('utf8')
    return enctext

def Decrypt(key, data):
    """
     AES长度为:32, 48, or 64,
    """
    key = key.encode('utf8')
    data = base64.b64decode(data)
    cipher = AES.new(key, AES.MODE_ECB)

    text_decrypted = unpad(cipher.decrypt(data))
    text_decrypted = text_decrypted.decode('utf8')
    return text_decrypted


if __name__ == '__main__':
    # 密钥
    key = '1c55c819appuiop0'
    # 需要加密数据
    data = 'my name is soubei'

    ecdata = Encrypt(key, data)
    print(ecdata)
    dec = Decrypt(key, ecdata)
    print(dec)

resultado de la operación


+P0/Pog35SVVpsVs1f7dWR1mplJfrreP/WDMcAb78AE=
my name is soubei

Process finished with exit code 0

Supongo que te gusta

Origin blog.csdn.net/weixin_37254196/article/details/108214235
Recomendado
Clasificación