python语言凯撒密码加密为什么要%26?

作者&投稿:大叔委 (若有异议请与网页底部的电邮联系)
jmu-python-凯撒密码加密算法,谢谢~

def encryption():
str_raw = input("请输入明文:")
k = int(input("请输入位移值:"))
str_change = str_raw.lower()
str_list = list(str_change)
str_list_encry = str_list
i = 0
while i < len(str_list):
if ord(str_list[i]) < 123-k:
str_list_encry[i] = chr(ord(str_list[i]) + k)
else:

print ("解密结果为:"+"".join(str_list_decry))
while True:
print (u"1. 加密")
print(u"2. 解密")
choice = input("请选择:")
if choice == "1": encryption()
elif choice == "2": decryption()
else: print (u"您的输入有误!")

s = raw_input('[开始加密]please input your str:')s = list(s)n = 0for sw in s: s[n] = chr(ord(sw)+3) n = n + 1sout = ''for sw2 in s: sout = sout + sw2print '[加密结果]:',sout解密的类似,主要用到ord、chr函数。

%26是确保加密后的值仍然在字母表范围内(当然为了能解密,前提条件是原文的字符也不能超过这26个字母)

为什么要%26呢?直接用原文的Unicode值加三再转换成字符不就可以了吗? --- 

  1. 凯撒密码应该是很古老的加密技术吧,那时候计算机都还没出现,ASCII码或者你说的unicode码更不存在。所以说表示字符的就那么26个。当然你说我可以创造一些字符啊,那也没问题,和直接用数字也没多少区别。但有可能保持这26个字母更能起到混淆视听的作用,毕竟它们可能不能一眼看出是密码。

  2. 不管在古代还是现代,增加字库都是有成本的,比如雕刻活字、设计字体等,能复用现有字体的话,打印传播密文的成本就大大降低。



你理解错了,而且还算错了。
(原文+3)%26的意思是26个英文字母形成环形,字母替换为其后第3个字母。按这样计算,x替换成a,y替换成b,z替换成c。
正确理解后,就很明显知道字符+3转换为字符是错误的,并不是字符替换,而是用后面第3个字母替换。既然是字母替换,那么你的计算也是错误的,不是用68%26,而是(68-65+1)%26。

s = input()
t = ""
for c in s:
if 'a' <= c <= 'z':
t += chr( ord('a') + ((ord(c)-ord('a')) + 3 ) )
elif 'A' <= c <= 'Z':
t += chr( ord('A') + ((ord(c)-ord('A')) + 3 )%26 )
else:
t += c
print(t)
上面的小写部分删除了mod26
以‘z’为例子 ascll=122
会变成 t += chr( 97+ ((122-97) + 3 ) ) 97+28 =125
最后会打印出 '{'
'Z'=90 'Z'-'A'=90-65 也=28 28mod26 变回了2 回到了 'C'


python,怎么让ord和chr转换的是一句话,而不是一个字母
你可以用一下map方法,它的作用就是扩展单参数方法的处理能力,使你可以一次性送入一系列待操作参数,自动反复执行单参数方法。另外,看起来你是要处理大量字符的问题,有一个模块叫作struct,对你来说更加有用、高效。

Python 程序编程问题,凯撒密码
class Caesar: def __init__(self): a = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.-!\\'"') b = a[3:] + a[:3] self.emap = dict(zip(a,b)) self.dmap = dict(zip(b,a)) def encode(self, text): tmp = [ (x in self.emap an...

Python编程-翻译密码?
区分大小写的凯撒密码。在凯撒密码的基础上针对大写与小字字符区分处理即可:解密只需要将7换成19(因为26-7=19),或者使用-7也可以:print(caesarcipher(caesarcipher('Student!', 7),19))

水富县17338049967: python语言凯撒密码加密为什么要%26? -
肥彬生脉: %26是确保加密后的值仍然在字母表范围内(当然为了能解密,前提条件是原文的字符也不能超过这26个字母) 为什么要%26呢?直接用原文的Unicode值加三再转换成字符不就可以了吗? --- 1. 凯撒密码应该是很古老的加密技术吧,那时候计算机都还没出现,ASCII码或者你说的unicode码更不存在.所以说表示字符的就那么26个.当然你说我可以创造一些字符啊,那也没问题,和直接用数字也没多少区别.但有可能保持这26个字母更能起到混淆视听的作用,毕竟它们可能不能一眼看出是密码. 2. 不管在古代还是现代,增加字库都是有成本的,比如雕刻活字、设计字体等,能复用现有字体的话,打印传播密文的成本就大大降低.

水富县17338049967: 谁有PYTHON编写的凯撒密码的加密和解密代码? -
肥彬生脉: 给你写了一个. def convert(c, key, start = 'a', n = 26): a = ord(start) offset = ((ord(c) - a + key)%n) return chr(a + offset) def caesarEncode(s, key): o = "" for c in s: if c.islower(): o+= convert(c, key, 'a') elif c.isupper(): o+= convert(c, key, 'A') else: o+= ...

水富县17338049967: 谁有PYTHON编写的凯撒密码的加密和解密代码? -
肥彬生脉: for x in range(0,len(C)): #输入大写字母 if ord(C[x])<=ord("Z") and ord(C[x])-3>=ord("A"): print chr(ord(C[x])-3), ...

水富县17338049967: 用Python2.7.10编写凯撒密码加密和解密程序 -
肥彬生脉: s = raw_input('[开始加密]please input your str:') s = list(s) n = 0 for sw in s:s[n] = chr(ord(sw)+3)n = n + 1 sout = '' for sw2 in s:sout = sout + sw2 print '[加密结果]:',sout解密的类似,主要用到ord、chr函数.

水富县17338049967: 凯撒加密由来 -
肥彬生脉: 凯撒加密(Caesar cipher)是一种简单的消息编码方式:它根据字母表将消息中的每个字母移动常量位k.举个例子如果k等于3,则在编码后的消息中,每个字母都会向前移动3位:a会被替换为d;b会被替换成e;依此类推.字母表末尾将回卷到字母表开头.于是,w会被替换为z,x会被替换为a.

水富县17338049967: jmu - python - 凯撒密码加密算法,谢谢 -
肥彬生脉: def encryption():str_raw = input("请输入明文:")k = int(input("请输入位移值:"))str_change = str_raw.lower()str_list = list(str_change)str_list_encry = str_listi = 0while i < len(str_list):if ord(str_list[i]) < 123-k:str_list_encry[i] = chr(ord...

水富县17338049967: python凯撒密码,编程,急用 -
肥彬生脉: def use_list(): str_before=input("请输入明文:") str_change=str_before.lower() str_list=list(str_change) str_list_change=str_list i=0 whilei

水富县17338049967: 恺撒加密的原理?
肥彬生脉: 就是一种替代密码.

水富县17338049967: 字符串“I love you ”,如果用凯撒密码,则加密后的密文为 -
肥彬生脉: 是 l oryh brx. 比如说密匙是1,那对英文单词book这个单词加密,结果就是相应的每个字母在字母表中的序号减去1,比如b在英文单词里排第二位. 那加密后就是a,o加密后就是n,依此类推,book加密后就是annj,解密时每个字母的顺序号加1,所对应的字母就是密文. 扩展资料: 凯撒密码使用方法: 奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回.每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;他用A代表Z. 另外,有证据表明,恺撒曾经使用过更为复杂的密码系统:文法学家普罗布斯曾经写过一份独具创新的手稿,研究恺撒书信中包含有秘密信息的字母.

水富县17338049967: 何谓凯撒密码. -
肥彬生脉: 恺撒密码是一种代换密码.据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码.凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密.明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文.例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C.由此可见,位数就是凯撒密码加密和解密的密钥.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网