В этой главе давайте обсудим подробно о симметричной и асимметричной криптографии.
Симметричная криптография
В этом типе процесс шифрования и дешифрования использует один и тот же ключ. Это также называется криптографией с секретным ключом . Основные характеристики симметричной криптографии следующие:
- Это проще и быстрее.
- Обе стороны обмениваются ключом безопасным способом.
недостаток
Основным недостатком симметричной криптографии является то, что, если ключ просочился злоумышленнику, сообщение может быть легко изменено, и это рассматривается как фактор риска.
Стандарт шифрования данных (DES)
Наиболее популярным алгоритмом симметричного ключа является стандарт шифрования данных (DES), а Python включает пакет, включающий логику алгоритма DES.
Монтаж
Команда для установки пакета pyDES DES в Python —
pip install pyDES
Простая программная реализация алгоритма DES заключается в следующем —
import pyDes data = "DES Algorithm Implementation" k = pyDes.des("DESCRYPT", pyDes.CBC, "\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5) d = k.encrypt(data) print "Encrypted: %r" % d print "Decrypted: %r" % k.decrypt(d) assert k.decrypt(d) == data
Он вызывает переменную padmode, которая выбирает все пакеты согласно реализации алгоритма DES и выполняет шифрование и дешифрование указанным способом.
Выход
Вы можете увидеть следующий вывод в результате кода, приведенного выше —
Асимметричная криптография
Это также называется криптографией с открытым ключом. Он работает в обратном направлении симметричной криптографии. Это означает, что для него требуются два ключа: один для шифрования и другой для дешифрования. Открытый ключ используется для шифрования, а закрытый ключ используется для расшифровки.
недостаток
- Благодаря своей длине ключа он обеспечивает более низкую скорость шифрования.
- Управление ключами имеет решающее значение.
Следующий программный код на Python иллюстрирует работу асимметричной криптографии с использованием алгоритма RSA и его реализацию —
from Crypto import Random from Crypto.PublicKey import RSA import base64 def generate_keys(): # key length must be a multiple of 256 and >= 1024 modulus_length = 256*4 privatekey = RSA.generate(modulus_length, Random.new().read) publickey = privatekey.publickey() return privatekey, publickey def encrypt_message(a_message , publickey): encrypted_msg = publickey.encrypt(a_message, 32)[0] encoded_encrypted_msg = base64.b64encode(encrypted_msg) return encoded_encrypted_msg def decrypt_message(encoded_encrypted_msg, privatekey): decoded_encrypted_msg = base64.b64decode(encoded_encrypted_msg) decoded_decrypted_msg = privatekey.decrypt(decoded_encrypted_msg) return decoded_decrypted_msg a_message = "This is the illustration of RSA algorithm of asymmetric cryptography" privatekey , publickey = generate_keys() encrypted_msg = encrypt_message(a_message , publickey) decrypted_msg = decrypt_message(encrypted_msg, privatekey) print "%s - (%d)" % (privatekey.exportKey() , len(privatekey.exportKey())) print "%s - (%d)" % (publickey.exportKey() , len(publickey.exportKey())) print " Original content: %s - (%d)" % (a_message, len(a_message)) print "Encrypted message: %s - (%d)" % (encrypted_msg, len(encrypted_msg)) print "Decrypted message: %s - (%d)" % (decrypted_msg, len(decrypted_msg))
Выход
Вы можете найти следующий вывод при выполнении приведенного выше кода —