Простой в использовании пакет Python для реализации и экспериментов со знаменитым алгоритмом шифрования DES. Он реализует как классические (настройки по умолчанию из описания учебника DES), так и неклассический DES. Проверьте приложение DES для очень специфической реализации, демонстрирующей эффект лавины и слабые ключи с использованием пакета.
Есть довольно много пакетов DES для Python, но ни один из них не предлагает такой высокой гибкости для реализации неклассической версии DES. Этот пакет предназначен специально для экспериментов с различными гиперпарамтерами, которые можно настроить при реализации DES.
help(<function_name>) в интерпретаторе Python.Бонус : этот пакет может быть спасен жизнью для CSE 537- Курс безопасности сети преподается в IIT (BHU).
*Настройка некоторых из них может потребовать изменения исходного кода при текущем выпуске
Запустите следующую команду в вашем терминале/командной строке-
$ pip install DESfiddle
ПРИМЕЧАНИЕ . Если у вас нет установки
pip, следуйте этим шагам.
# 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)
Спасибо, что нашли время внести свой вклад!
Ниже приводится набор руководящих принципов для участия в Desfiddle. Это просто руководящие принципы, а не правила, поэтому используйте свое лучшее суждение и не стесняйтесь предлагать изменения в этом документе в запросе.
Desfiddle построен на Python. Так что, если вы новичок в Python, перейдите на этот замечательный сайт.
Убедитесь, что ошибка еще не сообщила, поиск по GitHub по вопросам. Если вы не можете найти открытую проблему, решающая ошибку, откройте новую проблему.
Подробная информация очень полезна, чтобы понять проблему, например,
Запросы на вытягивание всегда приветствуются.
python -m unittest , чтобы проверить ваш код, прежде чем git commit .Следует за синтаксисом vm.mp в первую очередь является основным и означает, что не совместимые с обратными изменениями. Во -вторых, незначительные изменения в обратном порядке. Третий - это патч и означает небольшие обратные совместимые изменения.
Ручное место источника истины для версии находится на setup.py