Mật mã đối xứng và không đối xứng
Trong chương này, chúng ta hãy thảo luận chi tiết về mật mã đối xứng và bất đối xứng.
Mật mã đối xứng
Trong loại này, quá trình mã hóa và giải mã sử dụng cùng một khóa. Nó còn được gọi làsecret key cryptography. Các tính năng chính của mật mã đối xứng như sau:
- Nó đơn giản hơn và nhanh hơn.
- Hai bên trao đổi chìa khóa một cách an toàn.
Hạn chế
Hạn chế chính của mật mã đối xứng là nếu khóa bị lộ cho kẻ xâm nhập, thông điệp có thể dễ dàng bị thay đổi và đây được coi là một yếu tố rủi ro.
Tiêu chuẩn mã hóa dữ liệu (DES)
Thuật toán khóa đối xứng phổ biến nhất là Tiêu chuẩn mã hóa dữ liệu (DES) và Python bao gồm một gói bao gồm logic đằng sau thuật toán DES.
Cài đặt
Lệnh cài đặt gói DES pyDES trong Python là -
pip install pyDES
Việc triển khai chương trình đơn giản của thuật toán DES như sau:
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
Nó yêu cầu biến padmode tìm nạp tất cả các gói theo cách triển khai thuật toán DES và tuân theo mã hóa và giải mã theo một cách cụ thể.
Đầu ra
Bạn có thể thấy kết quả sau là kết quả của mã được đưa ra ở trên:
Mật mã không đối xứng
Nó còn được gọi là public key cryptography.Nó hoạt động theo cách ngược lại của mật mã đối xứng. Điều này ngụ ý rằng nó yêu cầu hai khóa: một để mã hóa và khóa khác để giải mã. Khóa công khai được sử dụng để mã hóa và khóa riêng được sử dụng để giải mã.
Hạn chế
- Do độ dài khóa của nó, nó làm giảm tốc độ mã hóa.
- Quản lý chính là rất quan trọng.
Đoạn mã chương trình sau đây bằng Python minh họa hoạt động của mật mã không đối xứng bằng cách sử dụng thuật toán RSA và cách triển khai của nó:
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))
Đầu ra
Bạn có thể tìm thấy kết quả sau khi thực thi đoạn mã được đưa ra ở trên: