古典密码 | 栅栏密码

介绍:

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

加密原理:

①把将要传递的信息中的字母交替排成上下两行。

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

③例如:

明文: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

用Python实现加密:

def fun_enCrypto(string_C , Ek):
    string_M = ''     #初始化密文
    n = 0               #提取第n列字符
    while n < Ek:
        m = 0           #第m分组
        while m < len(string_C) / Ek:  #明文长度/加密密钥  即得分组个数
            if (m * Ek+ n) < len(string_C):
                string_M = string_M + string_C[int(m * Ek+ n)]
                m += 1
            else :
                break
        n += 1
    return string_M

用Python实现解密:

        n = 0
        while n < Dk:
            m = 0
            while m < Ek:
                if (m * Dk + n) < len(string_M):
                    string_C = string_C + string_M[int(m * Dk + n)]
                    m += 1
                else:
                    break
            n += 1
        return string_C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值