Python3基础学习----简易凯撒密码

介绍

凯撒密码,或称恺撒加密、恺撒变换、变换加密。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

python方法

当前使用python3实现简单的将字母进行替换,并传入偏移量,此时我们需要用到python3的内置函数ord()函数,而其配对的函数为chr() 函数【对于8位的ASCII字符串】或unichr() 函数【对于Unicode对象】;
ord函数:它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常;
chr函数:即将传入的ASCII 数值转化为字符,示例代码如下:

>>> ord(1)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    ord(1)
TypeError: ord() expected string of length 1, but int found
>>> ord(4)
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    ord(4)
TypeError: ord() expected string of length 1, but int found
>>> ord("4")
52
>>> ord("0")
48
>>> ord("100")
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    ord("100")
TypeError: ord() expected a character, but string of length 3 found
>>> ord("10")
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    ord("10")
TypeError: ord() expected a character, but string of length 2 found
>>> ord("9")
57
>>> ord("a")
97
>>> chr(100)
'd'
>>> chr(58)
':'
实现代码

在下方代码中我们发现我们在chr内置函数之前没有使用ord内置函数来获取ASCII码,直接使用了相加;因为在循环字符串类型时item已经直接转为数字类型

>>> def caesar():
    num = int(input('请输入偏移量(1-10):'))
    wstr = input('请输入加密的字符串:').encode('utf-8')
    rstr = ''
    for item in wstr:
        rstr += chr(item+num)
    print("处理结果:",rstr)
    return rstr
>>> caesar()
请输入偏移量(1-10):3
请输入加密的字符串:asa
处理结果: dvd
'dvd'

另一种写法可能会更容易理解一些

>>> def caesar():
    num = int(input('请输入偏移量(1-10):'))
    wstr = input('请输入加密的字符串:')
    rstr = ''
    for item in wstr:
        rstr += chr(ord(item)+num)
    print("处理结果:",rstr)
    return rstr

>>> caesar()
请输入偏移量(1-10)3
请输入加密的字符串:asa
处理结果: dvd
'dvd'

因为在使用input输入时我们使用了encode(‘utf-8’)导致我们的字符串已经修改,在循环输出时已转为数字,b’a’ 即 b’\x61’ 实际内存中为 [0110 0001] ,因此在循环输出时输出为数字 示例如下:

>>> "asa".encode('utf-8')
b'asa'
>>> for item in b'asa':
	print(item)

	
97
115
97
>>> for item in b'as圣诞节':
	print(item)
	
SyntaxError: bytes can only contain ASCII literal characters.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值