本文发布于 2020-06-03, 最后更新于 2275 天前,其中的信息可能已经有所发展或是发生改变。
文章摘要
本为解决VB的凯撒加密问题: 由于VB中的mod会取到负数,比如-1 mod 26得到的是-1 因此当偏移量n为负数时,加密字符的ASCII编码会越出ASCII编码的范围(a的编码为97,它将变为96) 而我想要的是字母表循环,所以也就不能的得到正确的加密字符串 但发现python很好的解决了这个问题 -1 mod 26 为 25 下面直接发代码 def StrEncrypt( # 待加密字符串 …
本为解决VB的凯撒加密问题: 由于VB中的mod会取到负数,比如-1 mod 26得到的是-1 因此当偏移量n为负数时,加密字符的ASCII编码会越出ASCII编码的范围(a的编码为97,它将变为96) 而我想要的是字母表循环,所以也就不能的得到正确的加密字符串 但发现python很好的解决了这个问题 -1 mod 26 为 25 下面直接发代码 def StrEncrypt( # 待加密字符串 ordstr, # 偏移量 npos): productstr = "" strlen = len(ordstr) for i in range(strlen): asc = ord(ordstr i]) # 如果在字母表范围内就进行偏移 if(asc >= ord('a') and asc = ord('z')): productstr += chr((ord(ordstr i]) - ord('a') + npos) % 26 + ord('a')) elif(asc >= ord('A') and asc = ord('Z')): productstr += chr((ord(ordstr i]) - ord('A') + npos) % 26 + ord('A')) # 如果不在就直接连接字符串 else: productstr += ordstr i] return productstr def StrDecrypt( # 待解密字符串 ordstr, # 偏移量 npos): productstr = "" strlen = len(ordstr) for i in range(strlen): asc = ord(ordstr i]) # 如果在字母表范围内就进行偏移 if(asc >= ord('a') and asc = ord('z')): productstr += chr((ord(ordstr i]) - ord('a') - npos) % 26 + ord('a')) elif(asc >= ord('A') and asc = ord('Z')): productstr += chr((ord(ordstr i]) - ord('A') - npos) % 26 + ord('A')) # 如果不在就直接连接字符串 else: productstr += ordstr i] return productstr def StrKeyEncrypt( # 待加密字符串 ordstr, # 偏移量 key): productstr = "" strlen = len(ordstr) keylen = len(key) for i in range(strlen): asc = ord(ordstr i]) # 如果在字母表范围内就进行偏移 npos = int(key i % keylen]) # 取key if(asc >= ord('a') and asc = ord('z')): productstr += chr((ord(ordstr i]) - ord('a') + npos) % 26 + ord('a')) elif(asc >= ord('A') and asc = ord('Z')): productstr += chr((ord(ordstr i]) - ord('A') + npos) % 26 + ord('A')) # 如果不在就直接连接字符串 else: productstr += ordstr i] return productstr def StrKeyDecrypt( # 待解密字符串 ordstr, # 偏移量 key): productstr = "" strlen = len(ordstr) keylen = len(key) for i in range(strlen): asc = ord(ordstr i]) # 如果在字母表范围内就进行偏移 npos = int(key i % keylen]) # 取key if(asc >= ord('a') and asc = ord('z')): productstr += chr((ord(ordstr i]) - ord('a') - npos) % 26 + ord('a')) elif(asc >= ord('A') and asc = ord('Z')): productstr += chr((ord(ordstr i]) - ord('A') - npos) % 26 + ord('A')) # 如果不在就直接连接字符串 else: productstr += ordstr i] return productstr 借用老师的电脑发布的博文 上一页 1 2 下一页本为解决VB的凯撒加密问题:
<strong>由于VB中的mod会取到负数,比如-1 mod 26得到的是-1 因此当偏移量n为负数时,加密字符的ASCII编码会越出ASCII编码的范围(a的编码为97,它将变为96) 而我想要的是字母表循环,所以也就不能的得到正确的加密字符串</strong>
但发现python很好的解决了这个问题 -1 mod 26 为 25
下面直接发代码
dns (Auto identified)
def StrEncrypt(
# 待加密字符串
ordstr,
# 偏移量
npos):
productstr = ""
strlen = len(ordstr)
for i in range(strlen):
asc = ord(ordstr[i])
# 如果在字母表范围内就进行偏移
if(asc >= ord('a') and asc <= ord('z')):
productstr += chr((ord(ordstr[i]) - ord('a') +
npos) % 26 + ord('a'))
elif(asc >= ord('A') and asc <= ord('Z')):
productstr += chr((ord(ordstr[i]) - ord('A') +
npos) % 26 + ord('A'))
# 如果不在就直接连接字符串
else:
productstr += ordstr[i]
return productstr
def StrDecrypt(
# 待解密字符串
ordstr,
# 偏移量
npos):
productstr = ""
strlen = len(ordstr)
for i in range(strlen):
asc = ord(ordstr[i])
# 如果在字母表范围内就进行偏移
if(asc >= ord('a') and asc <= ord('z')):
productstr += chr((ord(ordstr[i]) - ord('a') -
npos) % 26 + ord('a'))
elif(asc >= ord('A') and asc <= ord('Z')):
productstr += chr((ord(ordstr[i]) - ord('A') -
npos) % 26 + ord('A'))
# 如果不在就直接连接字符串
else:
productstr += ordstr[i]
return productstr
def StrKeyEncrypt(
# 待加密字符串
ordstr,
# 偏移量
key):
productstr = ""
strlen = len(ordstr)
keylen = len(key)
for i in range(strlen):
asc = ord(ordstr[i])
# 如果在字母表范围内就进行偏移
npos = int(key[i % keylen]) # 取key
if(asc >= ord('a') and asc <= ord('z')):
productstr += chr((ord(ordstr[i]) - ord('a') +
npos) % 26 + ord('a'))
elif(asc >= ord('A') and asc <= ord('Z')):
productstr += chr((ord(ordstr[i]) - ord('A') +
npos) % 26 + ord('A'))
# 如果不在就直接连接字符串
else:
productstr += ordstr[i]
return productstr
def StrKeyDecrypt(
# 待解密字符串
ordstr,
# 偏移量
key):
productstr = ""
strlen = len(ordstr)
keylen = len(key)
for i in range(strlen):
asc = ord(ordstr[i])
# 如果在字母表范围内就进行偏移
npos = int(key[i % keylen]) # 取key
if(asc >= ord('a') and asc <= ord('z')):
productstr += chr((ord(ordstr[i]) - ord('a') -
npos) % 26 + ord('a'))
elif(asc >= ord('A') and asc <= ord('Z')):
productstr += chr((ord(ordstr[i]) - ord('A') -
npos) % 26 + ord('A'))
# 如果不在就直接连接字符串
else:
productstr += ordstr[i]
return productstr
借用老师的电脑发布的博文
本文采用 CC BY-NC-SA 4.0 协议进行授权,如无注明均为原创,转载请注明出处。
标题:python简单的字符串凯撒加密作者:九仞之行链接:http://dev.styunlen.cn/archives/post-649.html
还没有评论呢 ~ 快来抢沙发吧 🛋️