Skip to main content

No project description provided

Project description

Ciphers

Python module for implementing ciphers

Methods

Get Letter Value

Gets the A-Z value of a character

def get_letter_value(letter: str) -> int:
    '''Get the value of an English letter (A = 0, B = 1, C = 2 ...)'''
    return ord(letter) - 65

To Run

get_letter_value(letter)

Get Letter From Value

Gets the character from an A-Z value

def get_letter_from_value(value: int) -> str:
    '''Get the English letter from a value (A = 0, B = 1, C = 2 ...)'''
    return chr(value + 65)

To Run

get_letter_from_value(letter)

Caeser Cipher

Performs a Caeser Cipher on a given string with given shift Negative shift means shifting left

def caeser_cipher(text: str, shift: int, decode: bool = False) -> str:
    '''
    Caeser Cipher\n
    Shifts {text} {shift} amount in positive/negative direction (Right/Left respectively)\n
    Set {decode} to True to decode {text} with shift {shift}
    '''
    # Make everything Upper Case
    text.upper()

    # Begin
    result: str = ""
    for letter in text:
        # Get Value of each Letter
        value: int = get_letter_value(letter)
        # Get Letter from Value
        result += get_letter_from_value(value + shift) if not decode else get_letter_from_value(value - shift) # Handle Decoding

    return result

To Run

caeser_cipher(text, shift, decode) # decode is automatically false

Vigenère Cipher

Performs a Vigenère Cipher on a given string with given key

def vigenère_cipher(text: str, key: str, decode: bool = False) -> str:
    '''
    Vigenère Cipher\n
    Uses a Vigenère Cipher on {text} with key {key}\n
    Set {decode} to True to decode {text} with key {key}
    '''
    # Make everything Upper Case
    text.upper()
    key.upper()

    # Make Lists of Characters
    text_lst: list[str] = list(text)
    key_lst: list[str] = list(key)

    # Edit Length of Key
    if len(key_lst) < len(text_lst):
        key_lst = list(islice(cycle(key_lst), len(text_lst)))
    if len(key_lst) > len(text_lst):
        key_lst = key_lst[:len(key_lst)]

    result: str = ""

    for index, letter in enumerate(text_lst):
        # Get Values of each Letter
        letter_value: int = get_letter_value(letter)
        key_value: int = get_letter_value(key_lst[index]) if not decode else -get_letter_value(key_lst[index]) # Handle Decoding
        # Get Letter from Value
        new_letter: str = get_letter_from_value((letter_value + key_value) % 26)
        result += new_letter

    return result

To Run

vigenère_cipher(text, key, decode) # decode is automatically false

Rail Fence Cipher

Performs a Rail Fence Cipher on a given string with given amount of Rails

def rail_fence_cipher(text: str, rails: int, decode: bool = False):
    '''
    Rail Fence Cipher\n
    Uses a Rail Fence (Zig-Zag) Cipher on {text} with {rails} rails\n
    Set {decode} to True to decode {text} with {rails} rails
    '''
    # Make everything Upper Case
    text.upper()
    
    # Make Rail Fence
    rail_fence = [[""]*len(text) for _ in range(rails)]

    # Variables to move the cursor
    direction = -1
    row = 0

    if decode:  # Decoding
        # Fill the rail_fence with placeholders
        for col in range(len(text)):
            rail_fence[row][col] = '*'

            # Change direction if we've hit the top or bottom rail
            if row == 0 or row == rails - 1:
                direction *= -1

            # Move to the next row
            row += direction

        # Fill the rail rail_fence with the ciphertext
        i = 0
        for row in range(rails):
            for col in range(len(text)):
                if rail_fence[row][col] == '*':
                    rail_fence[row][col] = text[i]
                    i += 1

        # Extract the plaintext from the rail_fence
        result = [rail_fence[row][col] for col in range(len(text)) for row in range(rails) if rail_fence[row][col] is not None]

    else:  # Encoding
        # Fill the rail rail_fence
        for col in range(len(text)):
            rail_fence[row][col] = text[col]

            # Change direction if we've hit the top or bottom rail
            if row == 0 or row == rails - 1:
                direction *= -1

            # Move to the next row
            row += direction

        # Extract the text from the rail_fence
        result = [rail_fence[row][col] for row in range(rails) for col in range(len(text)) if rail_fence[row][col] is not None]

    return "".join(result)

To Run

rail_fence_cipher(text, shift, decode) # decode is automatically false

Following Methods are in the ASCII class

ASCII Decimal Cipher

Encodes a string into Decimal using ASCII notation

def decimal(text: str, decode: bool = False) -> str:
    '''
    ASCII Decimal\n
    Converts a string to and from decimal using ASCII
    '''
    result: str = ""
    if not decode:
        for letter in text:
            value: str = str(ord(letter))
            result += f"{value} "
        return result
    for number in text.split():
        try:
            value = chr(int(number))
            result += value
        except ValueError:
            print("Not a number")
    return result

To Run

ascii.decimal(text, decode) # decode is automatically false

ASCII Binary Cipher

Encodes a string into Binary using ASCII notation

def binary(text: str, decode: bool = False) -> str:
    '''
    ASCII Binary\n
    Converts a string to and from binary using ASCII
    '''
    result: str = ""
    if not decode:
        for letter in text:
            value: str = bin(ord(letter)).removeprefix("0b")
            result += f"0{value} "
        return result
    for byte in text.split():
        try:
            value = chr(int(byte, 2))
            result += value
        except ValueError:
            print(f"Not Binary: {byte}")
    return result

To Run

ascii.binary(text, decode) # decode is automatically false

ASCII Octal Cipher

Encodes a string into Octal using ASCII notation

def octal(text: str, decode: bool = False) -> str:
    '''
    ASCII Octal\n
    Converts a string to and from octal using ASCII
    '''
    result: str = ""
    if not decode:
        for letter in text:
            value: str = oct(ord(letter)).removeprefix("0o")
            result += f"{value} "
        return result
    for octa in text.split():
        try:
            value = chr(int(octa, 8))
            result += value
        except ValueError:
            print(f"Not Octal: {octa}")
    return result

To Run

ascii.octal(text, decode) # decode is automatically false

ASCII Hexadecimal Cipher

Encodes a string into Hexadecimal using ASCII notation

def hexadecimal(text: str, decode: bool = False) -> str:
    '''
    ASCII Hexadecimal\n
    Converts a string to and from hexadecimal using ASCII
    '''
    result: str = ""
    if not decode:
        for letter in text:
            value: str = hex(ord(letter)).removeprefix("0x")
            result += f"{value} "
        return result
    for hexa in text.split():
        try:
            value = chr(int(hexa, 16))
            result += value
        except ValueError:
            print(f"Not Hexadecimal: {hexa}")
    return result

To Run

ascii.hexadecimal(text, decode) # decode is automatically false

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ciphers_module-1.1.0.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

ciphers_module-1.1.0-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file ciphers_module-1.1.0.tar.gz.

File metadata

  • Download URL: ciphers_module-1.1.0.tar.gz
  • Upload date:
  • Size: 3.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.4

File hashes

Hashes for ciphers_module-1.1.0.tar.gz
Algorithm Hash digest
SHA256 13ff63c987adf3fc797913c98e1a8f641e9e25bd48a0abe1ceb831efa7849a22
MD5 1067dd7569cdb7199230d441cb5776cb
BLAKE2b-256 71e92a720c1e4e7c09f06471d2c519caeac5cc82a63df651990e001b11a093dc

See more details on using hashes here.

File details

Details for the file ciphers_module-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ciphers_module-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2d2724f60b6cea6e6bce3f0e219bd4ff3340ba042cc76d21c0acaaea093657ca
MD5 34ffcd8e08c7ad04ebf892ee45f635c2
BLAKE2b-256 11ef1c1e1c71d7ff28c4e43ba6f15df390cabd40dc59c0c4a5caa09e154a74a7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page