sehnsucht 发表于 2020-6-10 07:36:04

python中如何实现对中文的凯撒加密

自己写一个东西的时候涉及到加密问题,想到利用ASCII码来实现,后来查阅资料时发现这叫凯密码,那么这种加密方式如何对中文适用呢

xiaosi4081 发表于 2020-6-10 07:44:25

asci
ord()
凯撒
chr()

xiaosi4081 发表于 2020-6-10 07:47:56

本帖最后由 xiaosi4081 于 2020-6-10 08:12 编辑

a = ""
b = ""
for each in a:
    b = b + str(ord(each))
print(chr(b))

sehnsucht 发表于 2020-6-10 07:56:18

xiaosi4081 发表于 2020-6-10 07:47
a = ""
b = ""
for each in a:


是的,但是如果不考虑中文字符的话,只用考虑128个字符的情况下,对应的解密函数很好写,用到中文的话怎么解密呢

xiaosi4081 发表于 2020-6-10 07:59:42

sehnsucht 发表于 2020-6-10 07:56
是的,但是如果不考虑中文字符的话,只用考虑128个字符的情况下,对应的解密函数很好写,用到中文的话怎么 ...

把chr的2换成-2,再用chr弄一次

xiaosi4081 发表于 2020-6-10 08:05:52

sehnsucht 发表于 2020-6-10 07:56
是的,但是如果不考虑中文字符的话,只用考虑128个字符的情况下,对应的解密函数很好写,用到中文的话怎么 ...

设个最佳吧{:10_254:}{:10_287:}

Twilight6 发表于 2020-6-10 08:08:09

sehnsucht 发表于 2020-6-10 07:56
是的,但是如果不考虑中文字符的话,只用考虑128个字符的情况下,对应的解密函数很好写,用到中文的话怎么 ...


你对中文进行凯撒加密应该要找到中文的 ASCII 码范围吧

然后用for 遍历加密,如果加密时 +3 ASCII那么解密时候就 -3 ASCII

hrp 发表于 2020-6-10 08:09:33

xiaosi4081 发表于 2020-6-10 07:47
a = ""
b = ""
for each in a:


ord得到的不是数字吗?字符串b跟数字相加不报错吗{:10_261:}
还有chr不是只接受一个参数吗,两个参数是什么用法{:10_245:}

xiaosi4081 发表于 2020-6-10 08:11:07

hrp 发表于 2020-6-10 08:09
ord得到的不是数字吗?字符串b跟数字相加不报错吗
还有chr不是只接受一个参数吗,两个参数是 ...

谢谢提醒

sehnsucht 发表于 2020-6-10 08:12:49

xiaosi4081 发表于 2020-6-10 08:11
谢谢提醒

是的,,没有看太懂

sehnsucht 发表于 2020-6-10 08:14:11

Twilight6 发表于 2020-6-10 08:08
你对中文进行凯撒加密应该要找到中文的 ASCII 码范围吧

然后用for 遍历加密,如果加密时 +3 ASCII   ...

是的,我在找范围中……不知道有什么更简单的方式,这个范围好像挺大的

sehnsucht 发表于 2020-6-10 08:17:30

Twilight6 发表于 2020-6-10 08:08
你对中文进行凯撒加密应该要找到中文的 ASCII 码范围吧

然后用for 遍历加密,如果加密时 +3 ASCII   ...

……早晨没睡醒,想复杂了

Twilight6 发表于 2020-6-10 08:17:47

sehnsucht 发表于 2020-6-10 08:14
是的,我在找范围中……不知道有什么更简单的方式,这个范围好像挺大的

我去查了下 百度也没明确访问,应该是因为中途穿插着字符吧? 如果找出范围就好办了,难点就在汉字 ASCII码范围问题

Twilight6 发表于 2020-6-10 08:25:57

sehnsucht 发表于 2020-6-10 08:17
……早晨没睡醒,想复杂了

不考虑范围很好做到

a = input('请输入汉字明文:')

# 不考虑汉字 ASCII码范围进行加密
cipher = ''
for i in a:
    cipher+=(chr(ord(i)+3))
print('密文密码为:',cipher)


# 对汉字密文进行解密
clear = ''
for i in cipher:
    clear += (chr(ord(i)-3))
print('明文密码:',clear)

sehnsucht 发表于 2020-6-10 08:38:31

Twilight6 发表于 2020-6-10 08:25
不考虑范围很好做到

对,我想到了,考虑到汉字后面还有很多字符,所以不需要考虑范围,一开始是想实现一个一一对应的的密码,所以一直在想范围

Twilight6 发表于 2020-6-10 08:40:54

sehnsucht 发表于 2020-6-10 08:38
对,我想到了,考虑到汉字后面还有很多字符,所以不需要考虑范围,一开始是想实现一个一一对应的的密码, ...

哈哈~那问题解决了 ,就给个最佳~
页: [1]
查看完整版本: python中如何实现对中文的凯撒加密