Un paquete Python simple de usar para implementar y experimentar con el famoso algoritmo de cifrado DES. Implementa ambos clásicos (configuración predeterminada de la descripción del libro de texto de DE) y el DES no clásico. Consulte la aplicación DES para una implementación muy específica que demuestre el efecto de avalancha y las claves débiles utilizando el paquete.
Hay bastantes paquetes DES para Python, pero ninguno de ellos ofrece una flexibilidad tan alta para implementar una versión no clásica del DES. Este paquete está dirigido específicamente para experimentar con los diferentes hiperparamteres que se pueden ajustar mientras se implementa DES.
help(<function_name>) en el intérprete de Python.Bonificación : este paquete puede ser un salvavidas para CSE 537- Curso de seguridad de red que se enseña en IIT (BHU).
*Ajustar algunos de estos puede requerir cambiar el código fuente a partir de la versión actual
Ejecute el siguiente comando en su terminal/solicitante del sistema-
$ pip install DESfiddle
Nota : Si no tiene
pipinstalado, siga estos pasos.
# Importing
import DESfiddle.utils as dfu
# Usage
permutation_arr = dfu.generate_permutation(64)
# Importing
from DESfiddle.utils import *
# or just specify the function name you wanna import
# Usage
permutation_arr = generate_permutation(64)
from DESfiddle.utils import *
# Inputs in binary setting
plaintext = "0101010101010101010101010101010101010101010101010101010101010101"
key = "1111111111111111111111111111111100000000000000000000000000000000"
# Settings
nor = 16
halfwidth = 32
hamming_dist = 1
# Hamming the plaintext in binary mode
ref_pt_arr = preprocess_plaintext(plaintext, halfwidth)
pt_arr = preprocess_plaintext(plaintext, halfwidth, hamming_dist)
key = preprocess_key(key, halfwidth)
rkb,rkh = generate_round_keys(key,nor, halfwidth)
ref_ciphertext, ref_round_ciphertexts = encrypt(ref_pt_arr, rkb, nor, halfwidth)
_, round_ciphertexts = encrypt(pt_arr, rkb, nor, halfwidth)
diff = calc_diff(ref_round_ciphertexts, round_ciphertexts)
# Hamming the key in binary mode
pt_arr = preprocess_plaintext(plaintext, halfwidth)
ref_key = preprocess_key(key,halfwidth)
key = preprocess_key(key, halfwidth, hamming_dist)
ref_rkb, ref_rkh = generate_round_keys(ref_key, nor, halfwidth)
rkb,_ = generate_round_keys(key, nor, halfwidth)
ref_ciphertext, ref_round_ciphertexts = encrypt(pt_arr, ref_rkb, nor, halfwidth)
_, round_ciphertexts = encrypt(pt_arr, rkb, nor, halfwidth)
diff = calc_diff(ref_round_ciphertexts, round_ciphertexts)
from DESfiddle.utils import *
# Inputs in ASCII setting
plaintext = "This is so cool"
key = "Yesss"
# Settings
nor = 16
halfwidth = 32
hamming_dist = 1
# Preprocessing when input in ASCII
plaintext = txt_to_hex(plaintext)
plaintext = hex_to_bin(plaintext)
key = txt_to_hex(key)
key = hex_to_bin(key)
# Hamming the plaintext in binary mode
ref_pt_arr = preprocess_plaintext(plaintext, halfwidth)
pt_arr = preprocess_plaintext(plaintext, halfwidth, hamming_dist)
key = preprocess_key(key, halfwidth)
rkb,rkh = generate_round_keys(key,nor, halfwidth)
ref_ciphertext, ref_round_ciphertexts = encrypt(ref_pt_arr, rkb, nor, halfwidth)
_, round_ciphertexts = encrypt(pt_arr, rkb, nor, halfwidth)
diff = calc_diff(ref_round_ciphertexts, round_ciphertexts)
# Hamming the key in binary mode
pt_arr = preprocess_plaintext(plaintext, halfwidth)
ref_key = preprocess_key(key,halfwidth)
key = preprocess_key(key, halfwidth, hamming_dist)
ref_rkb, ref_rkh = generate_round_keys(ref_key, nor, halfwidth)
rkb,_ = generate_round_keys(key, nor, halfwidth)
ref_ciphertext, ref_round_ciphertexts = encrypt(pt_arr, ref_rkb, nor, halfwidth)
_, round_ciphertexts = encrypt(pt_arr, rkb, nor, halfwidth)
diff = calc_diff(ref_round_ciphertexts, round_ciphertexts)
¡Gracias por tomarse el tiempo para contribuir!
El siguiente es un conjunto de pautas para contribuir a Desfiddle. Estas son solo pautas, no reglas, así que use su mejor juicio y siéntase libre de proponer cambios en este documento en una solicitud de extracción.
Desfiddle está construido sobre Python. Entonces, si eres nuevo en Python, dirígete a este gran sitio web.
Asegúrese de que el error ya no se informara al buscar en GitHub bajo problemas. Si no puede encontrar un problema abierto que aborde el error, abra un nuevo problema.
La información detallada es muy útil para comprender un problema, por ejemplo
Las solicitudes de extracción siempre son bienvenidas.
python -m unittest para probar su código antes de git commit .Sigue la sintaxis vm.mp primero es importante y significa que no los cambios compatibles con versiones anteriores. El segundo es menor y significa cambios compatibles hacia atrás. El tercero es el parche y significa pequeños cambios compatibles hacia atrás.
El lugar manual de fuente de verdad para la versión es en setup.py