从零开始入门密码学_1

1.凯撒密码(Caesar)

凯撒密码简单理解就是将字符进行平移。

例如:将字母右移10位,那么 Password 将加密成Zkccgybn

凯撒加密的密钥就是右移的位数,由于只有26个英文字母,所以总共有26个密钥,暴力破解,穷举搜索,就可以破解密文。

python实现如下:

#! /usr/bin/env python3

#Caesar Encrypt

def CaeserEncrypt(text,n=10):#默认右移10位
    if not text.isalpha():
        raise Exception('Input must be a text of letters\n')
    else:
        res = ''
        for char in text:
            num = ord(char)
            if char.isupper():
                if num+n >90:
                    res += chr(num+n-26)
                else:
                    res += chr(num+n)
            else:
                if num+n > 122:
                    res += chr(num+n-26)
                else:
                    res += chr(num+n)
    return res

if __name__ == '__main__':
    //Caeser Encrypt
    text = 'Password'
    print(CaeserEncrypt(text))

    //穷举破解
    text = 'Zkccgybn'
    for i in range(1,27):
        print(CaeserEncrypt(text,i),' ',end='')

结果如下:
Zkccgybn

Alddhzco  Bmeeiadp  Cnffjbeq  Doggkcfr  Ephhldgs  
Fqiimeht  Grjjnfiu  Hskkogjv  Itllphkw  Jummqilx  
Kvnnrjmy  Lwoosknz  Mxpptloa  Nyqqumpb  Ozrrvnqc  
Password  Qbttxpse  Rcuuyqtf  Sdvvzrug  Tewwasvh 
Ufxxbtwi  Vgyycuxj  Whzzdvyk  Xiaaewzl  Yjbbfxam  
Zkccgybn  

2.简单替换密码

凯撒密码将字母平移,本质是建立了一个字母之间的一一映射,它也是一种特殊的替换密码。

如果我们打乱这种替换顺序,新建一个字母之间的一一映射,就可以得到一种新的加密方式,这就是简单替换密码。

python实现如下:

#! /usr/bin/env python3

#替换加密

import random

def generate_key():#随机生成一个密钥
    key = {}
    list = []
    for i in range(26):
        while True:
            char = chr(round(random.uniform(65,90)))
            if char not in list:
                break
        key[chr(65+i)] = char
        list.append(char)
    for k,v in key.copy().items():
        key[k.lower()] = v.lower()
    return key

def replaceEncrypt(text,key):#给定 明文和替换密钥 进行加密
    res = ''
    for char in text:
        if char.isalpha():
            res += key[char]
        else:
            res += char
    return res

if __name__ == '__main__':
    key = generate_key()
    print(key)

    text = 'Password'
    print(replaceE
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值