密码学基础(初学者)

这篇博客介绍了密码学基础知识,特别是凯撒加密,包括其历史、实例和一个变异形式。还提到了基于ASCII码表的变异凯撒以及斐波那契数列变异的凯撒加密。此外,讨论了基础的base家族加密方法和栅栏密码。提供了一些简单的Python实现和解密示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于此内容学习所写的代码已上传到githubhttp://github.com/JasonCian/Simple-Script-for-CTF-Cryptography-Beginners

凯撒加密

历史

  • 在古罗马苏维托尼乌斯所著的《罗马十二帝王传》中记载了凯撒曾经使用一种密码来和自己的军队传递重要情报,我们将这种密码称为凯撒密码。

  • 尤利乌斯·凯撒

  • 现在已经无法弄清凯撒密码在当时有多大的效果,但是有理由相信它是安全的。因为凯撒大部分敌人都是目不识丁的,而其余的则可能将这些消息当作是某个未知的外语。即使有某个敌人获取了凯撒的加密信息,根据现有的记载,当时也没有任何技术能够解决这一最基本、最简单的替换密码。

  • 现在,凯撒密码只会作为其他更复杂加密方式的一个步骤被广泛应用,因为它非常容易被破解。从当前技术来看,实际应用中使用凯撒密码几乎无法保证通信的安全。

实例

  • 凯撒密码的替换方法是通过排列字母顺序按一个固定的偏移量进行偏移,在这个基础上使整段明文最终呈现为不可直接阅读理解的密文。

  • 以26个字母的英文字母表为基础,可以得到从1-25共25种不同偏移量的加密

  • 基于26个英文字母表的凯撒加密,解密以及爆破

    # Caesar Cipher
    ​
    MAX_KEY_SIZE = 26
    ​
    def getMode():
        while True:
            print('请选择加密或解密模式,或者选择暴力破解:')
            print('加密:encrypt(e)')
            print('解密:decrypt(d)')
            print('暴力破解:brute(b)')
            mode = input().lower()
            if mode in 'encrypt e decrypt d brute b'.split():
                return mode
            else:
                print('请输入"encrypt"或"e"或"decrypt"或"d"或"brute"或"b"!')
    ​
    def getMessage():
        print('请输入你的信息:')
        return input()
    ​
    def getKey():
        key = 0
        while True:
            print('请输入密钥数字(1-%s)' % (MAX_KEY_SIZE))
            key = int(input())
            if (key >=1 and key <= MAX_KEY_SIZE):
                return key
    ​
    def getTranslatedMessage(mode, message, key):
        if mode[0] == 'd':
            key = -key
        translated = ''
        for i in  range(len(message)):
            symbol = message[i]
            if symbol.isalpha():
                num = ord(symbol)+ key
                if symbol.isupper():
                    if num > ord('Z'):
                        num -= 26
                    elif num < ord('A'):
                        num += 26
                elif symbol.islower():
                    if num > ord('z'):
                        num -= 26
                    elif num < ord('a'):
                        num += 26
    ​
                translated += chr(num)
            else:
                translated += symbol
        return tran
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值