凯撒、栅栏密码和3种特殊古典加密(贴了原理和解密、加密网址)

凯撒密码

  • 凯撒密码是对26个字母进行位移替换加密,如位移为2,那么字母a对应字母c,b对应d,·······依次向后位移。
  • 举例:位移为2,k nqxg aqw就是 i love you
  • 缺点:规律简单,容易破解,对方可以通过字母的使用频率和单词分析破解
  • 优点:非常容易破解,适合表白?

栅栏密码

  • ①把将要传递的信息中的字母交替排成上下两行。
    ②再将下面一行字母排在上面一行的后边,从而形成一段密码。
    ③例如:
    明文:THE LONGEST DAY MUST HAVE AN END
    加密
    1、把将要传递的信息中的字母交替排成上下两行。
    T E O G S D Y U T A E N N
    H L N E T A M S H V A E D
    2、 密文:
    将下面一行字母排在上面一行的后边。
    TEOGSDYUTAENN HLNETAMSHVAED
    解密
    先将密文分为两行
    T E O G S D Y U T A E N N
    H L N E T A M S H V A E D
    再按上下上下的顺序组合成一句话
    明文:THE LONGEST DAY MUST HAVE AN END

特殊古典加密

  • 第一种:"由人俱乙口一中"和"大中口由人由工"具有相同的含义ÿ
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于古典密码类很多,下面只列举了一些常见的古典密码的Python加密解密代码。其中,包括了凯撒密码、仿射密码、维吉尼亚密码栅栏密码、多倍经典密码等。 凯撒密码 加密代码: ```python def caesar_cipher(text, key): result = "" for i in range(len(text)): char = text[i] if char.isupper(): result += chr((ord(char) + key - 65) % 26 + 65) elif char.islower(): result += chr((ord(char) + key - 97) % 26 + 97) else: result += char return result ``` 解密代码: ```python def caesar_decipher(text, key): result = "" for i in range(len(text)): char = text[i] if char.isupper(): result += chr((ord(char) - key - 65) % 26 + 65) elif char.islower(): result += chr((ord(char) - key - 97) % 26 + 97) else: result += char return result ``` 仿射密码 加密代码: ```python def affine_cipher(text, a, b): result = "" for i in range(len(text)): char = text[i] if char.isupper(): result += chr(((a * (ord(char) - 65) + b) % 26) + 65) elif char.islower(): result += chr(((a * (ord(char) - 97) + b) % 26) + 97) else: result += char return result ``` 解密代码: ```python def affine_decipher(text, a, b): result = "" for i in range(len(text)): char = text[i] if char.isupper(): result += chr(((a_inv(a) * (ord(char) - b - 65)) % 26) + 65) elif char.islower(): result += chr(((a_inv(a) * (ord(char) - b - 97)) % 26) + 97) else: result += char return result def a_inv(a): for i in range(1, 26): if (a*i) % 26 == 1: return i return None ``` 维吉尼亚密码 加密代码: ```python def vigenere_cipher(text, key): result = "" key = key.upper() index = 0 for i in range(len(text)): char = text[i] if char.isupper(): result += chr((ord(char) + ord(key[index]) - 130) % 26 + 65) elif char.islower(): result += chr((ord(char) + ord(key[index]) - 194) % 26 + 97) else: result += char if char.isalpha(): index = (index + 1) % len(key) return result ``` 解密代码: ```python def vigenere_decipher(text, key): result = "" key = key.upper() index = 0 for i in range(len(text)): char = text[i] if char.isupper(): result += chr((ord(char) - ord(key[index]) + 26) % 26 + 65) elif char.islower(): result += chr((ord(char) - ord(key[index]) + 26) % 26 + 97) else: result += char if char.isalpha(): index = (index + 1) % len(key) return result ``` 栅栏密码 加密代码: ```python def rail_fence_cipher(text, key): result = "" for i in range(key): for j in range(i, len(text), key): result += text[j] return result ``` 解密代码: ```python def rail_fence_decipher(text, key): result = [""] * len(text) index = 0 for i in range(key): j = i while j < len(text): result[j] = text[index] index += 1 j += key return "".join(result) ``` 多倍经典密码 加密代码: ```python def playfair_cipher(text, key): key = key.upper().replace("J", "I") text = text.upper().replace("J", "I") matrix = create_matrix(key) text_pairs = create_text_pairs(text) result = "" for pair in text_pairs: row1, col1 = get_position(matrix, pair[0]) row2, col2 = get_position(matrix, pair[1]) if row1 == row2: result += matrix[row1][(col1 + 1) % 5] + matrix[row2][(col2 + 1) % 5] elif col1 == col2: result += matrix[(row1 + 1) % 5][col1] + matrix[(row2 + 1) % 5][col2] else: result += matrix[row1][col2] + matrix[row2][col1] return result def create_matrix(key): key_chars = [] matrix = [] for char in key: if char not in key_chars: key_chars.append(char) alphabet = "ABCDEFGHIKLMNOPQRSTUVWXYZ" for char in alphabet: if char not in key_chars: key_chars.append(char) for i in range(5): matrix.append(key_chars[i*5:(i+1)*5]) return matrix def create_text_pairs(text): pairs = [] i = 0 while i < len(text): if i == len(text) - 1: pairs.append(text[i] + "X") i += 1 elif text[i] == text[i+1]: pairs.append(text[i] + "X") i += 1 else: pairs.append(text[i:i+2]) i += 2 return pairs def get_position(matrix, char): for i in range(5): for j in range(5): if matrix[i][j] == char: return i, j return None def multi_cipher(text, key): result = "" for i in range(len(key)): shift = ord(key[i]) - 65 result += caesar_cipher(text, shift) text = result result = "" return text ``` 解密代码: ```python def playfair_decipher(text, key): key = key.upper().replace("J", "I") matrix = create_matrix(key) text_pairs = create_text_pairs(text) result = "" for pair in text_pairs: row1, col1 = get_position(matrix, pair[0]) row2, col2 = get_position(matrix, pair[1]) if row1 == row2: result += matrix[row1][(col1 - 1) % 5] + matrix[row2][(col2 - 1) % 5] elif col1 == col2: result += matrix[(row1 - 1) % 5][col1] + matrix[(row2 - 1) % 5][col2] else: result += matrix[row1][col2] + matrix[row2][col1] return result.replace("X", "") def multi_decipher(text, key): result = "" for i in range(len(key)): shift = ord(key[i]) - 65 result += caesar_decipher(text, shift) text = result result = "" return text ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值