Um pacote Python simples de usar para implementar e experimentar o famoso algoritmo de criptografia DES. Ele implementa as ambas as configurações clássicas (padrão da descrição do livro didático de DES) e não clássicas. Confira o aplicativo DES para obter uma implementação muito específica, demonstrando efeito de avalanche e chaves fracas usando o pacote.
Existem alguns pacotes DES para o Python, mas nenhum deles oferece tão alta flexibilidade para implementar uma versão não clássica do DES. Este pacote visa especificamente experimentar os diferentes hiperparamters que podem ser aprimorados ao implementar o DES.
help(<function_name>) no intérprete Python.Bônus : Este pacote pode ser um salva-vidas para o CSE 537- Curso de Segurança de Rede ensinado no IIT (BHU).
*Ajustar alguns deles podem exigir alterar o código -fonte a partir da versão atual
Execute o seguinte comando em seu prompt de terminal/comando
$ pip install DESfiddle
NOTA : Se você não tiver instalado
pip, siga estas etapas.
# 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)
Obrigado por reservar um tempo para contribuir!
A seguir, é apresentado um conjunto de diretrizes para contribuir para o Desfiddle. Essas são apenas diretrizes, não regras; portanto, use seu melhor julgamento e sinta -se à vontade para propor alterações neste documento em uma solicitação de tração.
Desfiddle é construído sobre Python. Portanto, se você é novo no Python, por favor, vá para este ótimo site.
Verifique se o bug ainda não foi relatado pesquisando no Github em questões. Se você não conseguir encontrar um problema em aberto abordando o bug, abra um novo problema.
Informações detalhadas são muito úteis para entender um problema, por exemplo-
Solicitações de tração são sempre bem -vindas.
python -m unittest para testar seu código antes de git commit .Segue a sintaxe vm.mp primeiro é importante e significa que não as mudanças compatíveis com versões anteriores. O segundo é menor e significa alterações compatíveis com versões anteriores. O terceiro é o patch e significa pequenas alterações compatíveis com versões anteriores.
O local manual da fonte da verdade para a versão está em setup.py