Rail_fence_cipher 栅栏密码

Posted IT88老兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rail_fence_cipher 栅栏密码相关的知识,希望对你有一定的参考价值。

Rail_fence_cipher 栅栏密码

所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)

加 密 原 理

当加密为两组时,把将要传递的信息中的字母交替排成上下两行。

再将下面一行字母排在上面一行的后边,从而形成一段密码。

例如:

  • 加密明文。

    ALL LIFE IS A GAME OF LUCK

    当加密为两组时,将句子从上往下交替写成两行,也就是第一 三 五等奇数个字母作为第一组,第二四六作为第二组。

    ALIESGMOLC

    LLFIAAEFUK

    再将第一组放在第二组前

    ALIESGMOLCLLFIAAEFUK

    加密完成。

在实际应用当中可以将该加密方式分成更多组,或者与其他加密方式组合使用。

  • 解 密

    第一步将密文按组分开。当密文字母个数为奇数个时,第一组比第二组多一个。

    第二步自上向下读出。

    举例:

    密文:TMKECDYONOAEAHACUT

    密文字母个数为18,第一组9个字母,第二组9个字母。

    TMKECDYON

    OAEAHACUT

    自上向下读出

    TOMAKEEACHDAYCOUNT

    得明文

    TO MAKE EACH DAY COUNT

    练 习
    密文: TMROIAOHRAOORWSNTEDY

代码

[rail_fence_cipher.py]{..\\src\\ciphers\\rail_fence_cipher.py}

"""
Prepare
   1. sys.path 中增加 TheAlgorithms\\src 子模块

"""
import sys
sys.path.append(\'E:\\dev\\AI\\TheAlgorithms\\src\')

案例一:

  • encrypt

    通过放置字符串的每个字符来打乱字符串的字符
    在一个锯齿形的网格中(高度取决于键)
    从左到右阅读。
encrypt(
    input_string: str,
    key: int)
    -> str:
  • decrypt

    根据密钥生成模板并将其填充
    输入字符串的字符,然后读入
    一个锯齿形的形成。
decrypt(
    input_string: str,
    key: int) 
    -> str:
  • bruteforce
    通过猜测每个密钥使用解密函数
bruteforce(
    input_string: str) 
    -> dict[int, str]
from ciphers.rail_fence_cipher import encrypt,decrypt
# ,bruteforce
"""
"""
print(encrypt("Hello World", 4))   #  \'HWe olordll\'

print(decrypt("HWe olordll", 4))   #  \'Hello World\'

"""
 Uses decrypt function by guessing every key
"""

# print(bruteforce("HWe olordll")[4]) #    \'Hello World\'




    
HWe olordll
Hello World





\'\\n Uses decrypt function by guessing every key\\n\'


以上是关于Rail_fence_cipher 栅栏密码的主要内容,如果未能解决你的问题,请参考以下文章

栅栏密码

谁能解释一下栅栏密码??

实验吧围在栅栏中的爱WP

ivoleuoy栅栏密码怎么解

密码学笔记—栅栏密码

CTF---密码学入门第四题 困在栅栏里的凯撒