pyDes

2.0.1 · abandoned · verified Thu Apr 16

pyDes is a pure Python implementation of the DES and Triple-DES encryption algorithms. It is designed for portability across Python versions rather than performance, making it suitable for simple, small-scale encryption tasks. The current version, 2.0.1, was released on April 28, 2010, and the project is no longer actively maintained.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates basic DES and Triple DES encryption and decryption using pyDes. It highlights the necessity of using byte strings for keys, IVs, and data in Python 3, and the recommended practice of using PKCS5 padding. Separate examples are provided for DES and different Triple DES key lengths.

import pyDes

# For Python 3, all strings must be converted to bytes
# For DES, key must be exactly 8 bytes
# For Triple DES, key must be 16 or 24 bytes
# IV (Initialization Vector) must be 8 bytes for CBC mode

key_des = b"DESCRYPT"
key_3des_2key = b"0123456789ABCDEF"
key_3des_3key = b"0123456789ABCDEFabcdefgh"

data = b"Please encrypt my data. It needs to be padded."

# --- Single DES Example (CBC mode, PKCS5 padding) ---
try:
    # DES encryption object
    k_des = pyDes.des(key_des, pyDes.CBC, b"\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)
    encrypted_des = k_des.encrypt(data)
    print(f"Encrypted DES: {encrypted_des!r}")
    decrypted_des = k_des.decrypt(encrypted_des)
    print(f"Decrypted DES: {decrypted_des!r}")
    assert decrypted_des == data
except ValueError as e:
    print(f"DES Error: {e}")

# --- Triple DES Example (2-Key, CBC mode, PKCS5 padding) ---
try:
    # Triple DES encryption object (2-key)
    k_3des_2key = pyDes.triple_des(key_3des_2key, pyDes.CBC, b"\0\0\0\0\0\0\0\0", pad=None, padmode=pyDes.PAD_PKCS5)
    encrypted_3des_2key = k_3des_2key.encrypt(data)
    print(f"Encrypted 3DES (2-key): {encrypted_3des_2key!r}")
    decrypted_3des_2key = k_3des_2key.decrypt(encrypted_3des_2key)
    print(f"Decrypted 3DES (2-key): {decrypted_3des_2key!r}")
    assert decrypted_3des_2key == data
except ValueError as e:
    print(f"3DES (2-key) Error: {e}")

# --- Triple DES Example (3-Key, ECB mode, PKCS5 padding) ---
try:
    # Triple DES encryption object (3-key)
    k_3des_3key = pyDes.triple_des(key_3des_3key, pyDes.ECB, pad=None, padmode=pyDes.PAD_PKCS5)
    encrypted_3des_3key = k_3des_3key.encrypt(data)
    print(f"Encrypted 3DES (3-key): {encrypted_3des_3key!r}")
    decrypted_3des_3key = k_3des_3key.decrypt(encrypted_3des_3key)
    print(f"Decrypted 3DES (3-key): {decrypted_3des_3key!r}")
    assert decrypted_3des_3key == data
except ValueError as e:
    print(f"3DES (3-key) Error: {e}")

view raw JSON →