解密主要找偏移量
确定是否是可以用词频分析,找偏移量可以穷举,一般是0-25,27相当于1。不能通过多次加密提升安全性,如先A后B,相当于‘A+B’偏移。
只对字母进行操作,并且变换不会超出原范围。
偏移量为13即为ROT13 实现代码如下:
str='EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG'
key=3
enstr=''
l=len(str)
for i in range(l):
k=ord(str[i])
if 65<=k<=90:
if k+key<=90:
enstr+=chr(k+key)
else:
enstr+=chr(k+key-90+65)
elif 97<=k<=122:
if k+key<=122:
enstr+=chr(k+key)
else:
enstr+=chr(k+key-122+97)
elif 48<=k<=57:
if k+key<=57:
enstr+=chr(k+key)
else:
enstr+=chr(k+key-57+48)
else:
enstr+=str[i]
print(enstr)
################################################
def caesar_cipher(text, key):
result = ''
for char in text:
if char.isalpha(): # 检查字符是否是字母
shift = 65 if char.isupper() else 97 # 如果是大写字母则为65,小写字母则为97
result += chr((ord(char) - shift + key) % 26 + shift) # 加密字符
else:
result += char # 如果不是字母则直接添加到结果中
return result
# 测试
text = 'EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG'
key = 3
encrypted_text = caesar_cipher(text, key)
print("加密后的文本:", encrypted_text)
第一个是自定义的,第二个取余的不太清楚,有时间再写一篇相关的
解密就是进行反操作
enc = 'EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG'
l = len(enc)
key=3
# print(l, 52 / 13)
# deenc = []
# for i in range(l):
# if 65 <= ord(enc[i]) <= 90:
# deenc.append((ord(enc[i]) - 62) // 26 + 65)
# elif 97 <= ord(enc[i]) <= 122:
# deenc.append((ord(enc[i]) - 94) // 26 + 97)
# elif 48 <= ord(enc[i]) <= 57:
# deenc.append((ord(enc[i]) - 45) // 10 + 48)
# else:
# deenc.append(ord(enc[i]))
# print(deenc)
# for j in range(l):
# print(chr(deenc[j]), end='')
destr=''
for i in range(l):
m=ord(enc[i])
if 65<=m<=90:
if m-key<65:
destr+=chr(m-key+26)
else:
destr+=chr(m-key)
elif 97<=m<=122:
if m-key<97:
destr+=chr(m-key+26)
else:
destr+=chr(m-key)
elif 48<=m<=57:
if m-key<48:
destr+=chr(m-key+10)
else:
destr+=chr(m-key)
else:
destr+=enc[i]
print(destr)
加密解密差不多感觉