ROT家族

ROT5加解密算法

加密方法:

  1. 将数字字符转换为整数
  2. 将整数加5,对10取模,得到加密后的整数
  3. 将加密后的整数转换为数字字符

解密方法:

  1. 将数字字符转换为整数
  2. 将整数减去5,若结果小于0,则加上10
  3. 将解密后的整数转换为数字字符

加解密脚本

def rot5_encrypt(plaintext):
    ciphertext = ""
    for c in plaintext:
        if c.isdigit():
            new_digit = (int(c) + 5) % 10
            ciphertext += str(new_digit)
        else:
            ciphertext += c
    return ciphertext

def rot5_decrypt(ciphertext):
    plaintext = ""
    for c in ciphertext:
        if c.isdigit():
            new_digit = (int(c) - 5) % 10
            plaintext += str(new_digit)
        else:
            plaintext += c
    return plaintext

ROT13加解密算法

加密过程:

  1. 首先,将明文中的每个字母替换成它在字母表中顺序排列的第13个字母。例如,明文中的字母A将替换为N,字母B将替换为O,以此类推。
  2. 如果字母表中的字母已经到了Z,则继续从字母表的开头(即字母A)开始计数。
  3. 对于非字母字符(例如数字、标点符号和空格),不进行加密,直接保留原样。
  4. 最终输出加密后的密文。

解密过程:

  1. 将密文中的每个字母替换为它在字母表中顺序排列的前13个字母,即将字母N替换为A,字母O替换为B,以此类推。
  2. 如果字母表中的字母已经到了A,则继续从字母表的末尾(即字母Z)开始计数。
  3. 对于非字母字符,不进行解密,直接保留原样。
  4. 最终输出解密后的明文。

加解密脚本

def rot13_encrypt(plaintext: str) -> str:
    ciphertext = ""
    for c in plaintext:
        if c.isalpha():
            if c.isupper():
                new_ascii = (ord(c) - 65 + 13) % 26 + 65
            else:
                new_ascii = (ord(c) - 97 + 13) % 26 + 97
            ciphertext += chr(new_ascii)
        else:
            ciphertext += c
    return ciphertext


def rot13_decrypt(ciphertext: str) -> str:
    plaintext = ""
    for c in ciphertext:
        if c.isalpha():
            if c.isupper():
                new_ascii = (ord(c) - 65 - 13) % 26 + 65
            else:
                new_ascii = (ord(c) - 97 - 13) % 26 + 97
            plaintext += chr(new_ascii)
        else:
            plaintext += c
    return plaintext

ROT18加解密算法

加密过程:

  1. 首先,将明文中的每个字母替换成它在字母表中顺序排列的第18个字母。例如,明文中的字母A将替换为S,字母B将替换为T,以此类推。
  2. 如果字母表中的字母已经到了Z,则继续从字母表的开头(即字母A)开始计数。
  3. 对于非字母字符(例如数字、标点符号和空格),不进行加密,直接保留原样。
  4. 最终输出加密后的密文。

解密过程:

  1. 将密文中的每个字母替换为它在字母表中顺序排列的前18个字母,即将字母S替换为A,字母T替换为B,以此类推。
  2. 如果字母表中的字母已经到了A,则继续从字母表的末尾(即字母Z)开始计数。
  3. 对于非字母字符,不进行解密,直接保留原样。
  4. 最终输出解密后的明文。

加解密脚本

def rot18_encrypt(plaintext: str) -> str:
    ciphertext = ""
    for c in plaintext:
        if c.isalpha():
            if c.isupper():
                new_ascii = (ord(c) - 65 + 18) % 26 + 65
            else:
                new_ascii = (ord(c) - 97 + 18) % 26 + 97
            ciphertext += chr(new_ascii)
        else:
            ciphertext += c
    return rot5_encrypt(rot13_encrypt(plaintext))


def rot18_decrypt(ciphertext: str) -> str:
    plaintext = ""
    for c in ciphertext:
        if c.isalpha():
            if c.isupper():
                new_ascii = (ord(c) - 65 - 18) % 26 + 65
            else:
                new_ascii = (ord(c) - 97 - 18) % 26 + 97
            plaintext += chr(new_ascii)
        else:
            plaintext += c
    return rot5_decrypt(rot13_decrypt(ciphertext))

ROT47加解密算法

加密过程:

  1. 首先,将明文中的每个字符转换为其对应的ASCII码值。
  2. 对于每个可打印字符,将其ASCII码值加上47。
  3. 如果加上47后的ASCII码值超过了126,则从33开始重新计数。
  4. 将加密后的ASCII码值转换回字符形式。
  5. 最终输出加密后的密文。

解密过程:

  1. 首先,将密文中的每个字符转换为其对应的ASCII码值。
  2. 对于每个可打印字符,将其ASCII码值减去47。
  3. 如果减去47后的ASCII码值小于33,则从126开始重新计数。
  4. 将解密后的ASCII码值转换回字符形式。
  5. 最终输出解密后的明文。

加解密脚本

def rot47_encrypt(plaintext: str) -> str:
    ciphertext = ""
    for c in plaintext:
        if 33 <= ord(c) <= 126:
            ciphertext += chr((ord(c) - 33 + 47) % 94 + 33)
        else:
            ciphertext += c
    return ciphertext


def rot47_decrypt(ciphertext: str) -> str:
    plaintext = ""
    for c in ciphertext:
        if 33 <= ord(c) <= 126:
            plaintext += chr((ord(c) - 33 - 47) % 94 + 33)
        else:
            plaintext += c
    return plaintext