数字和字母替换与Python中的自定义替换密码混合在一起

时间:2016-06-15 09:39:56

标签: python python-3.x encryption

这部分代码将字母转换为数字,然后将其乘以密钥(datetime * ip(替换(。,5)

import datetime
import time 
import socket
while (True):
IP=int(socket.gethostbyname(socket.gethostname()).replace(".","5"))
time=(int(datetime.datetime.now().strftime("%Y%m%d%H%M%S")))
qw=(int(str((time)+(IP))))
a=int("934")*1
b=int("346")*1
c=int("926")*1
d=int("9522")*1
e=int("7334")*1
f=int("5853")*1
g=int("2432")*1
h=int("2027")*1
i=int("7024")*1
j=int("828")*1
k=int("798")*1
m=int("593")*1
n=int("662")*1
l=int("5950")*1
o=int("357")*1
p=int("506")*1
q=int("239")*1
r=int("99")*1
s=int("372")*1
t=int("636")*1
u=int("553")*1
v=int("255")*1
w=int("298")*1
x=int("8822")*1
y=int("458")*1
z=int("659")*1
space=("633")
msg=input("")
msg=msg.replace("a",(str(a)))
msg=msg.replace("b",(str(b)))
msg=msg.replace("c",(str(c)))
msg=msg.replace("d",(str(d)))
msg=msg.replace("e",(str(e)))
msg=msg.replace("f",(str(f)))
msg=msg.replace("g",(str(g)))
msg=msg.replace("h",(str(h)))
msg=msg.replace("i",(str(i)))
msg=msg.replace("j",(str(j)))
msg=msg.replace("k",(str(k)))
msg=msg.replace("m",(str(m)))
msg=msg.replace("n",(str(n)))
msg=msg.replace("l",(str(l)))
msg=msg.replace("o",(str(o)))
msg=msg.replace("p",(str(p)))
msg=msg.replace("q",(str(q)))
msg=msg.replace("r",(str(r)))
msg=msg.replace("s",(str(s)))
msg=msg.replace("t",(str(t)))
msg=msg.replace("u",(str(u)))
msg=msg.replace("v",(str(v)))
msg=msg.replace("w",(str(w)))
msg=msg.replace("x",(str(x)))
msg=msg.replace("y",(str(y)))
msg=msg.replace("z",(str(z)))
msg=msg.replace(" ",(str(space)))
msg=int(msg)
msg=int(msg)*(qw)
fileb=open("key.txt","w")
filec=fileb.write(str(qw))
fileb.close()
file=open("msg decrypt.txt","w")
filea=file.write(str(msg))
file.close()
print (msg)

解密代码这是将数字替换回字母时的问题

file=open("msg decrypt.txt","r")
encrypted_msg=int(file.read())
print(encrypted_msg)
file.close()
fileb=open("key.txt","r")
key=int(fileb.read())
fileb.close()
encrypted_msg=(int(encrypted_msg)-(key))
encrypted_msg=(int(encrypted_msg)/(key))
encrypted_msg=(int(encrypted_msg)+1)
print(encrypted_msg)
a=("934")
b=("346")
c=("926")
d=("9522")
e=("7334")
f=("5853")
g=("2432")
h=("2027")
i=("7024")
j=("828")
k=("798")
m=("593")
n=("662")
l=("5950")
o=("357")
p=("506")
q=("239")
r=("99")
s=("372")
t=("63")
u=("55")
v=("255")
w=("298")
x=("8822")
y=("458")
z=("659")
space=("633")
ab=str(encrypted_msg)
if (a) in ab:
    ab=ab.replace(str(a),"a")
if ("346") in ab:    
    ab=ab.replace(str(b),"b")    
if ("926") in ab:    
    ab=ab.replace(str(c),"c")
if ("9522") in ab:
    ab=ab.replace(str(d),"d")
if ("7334") in ab:
    ab=ab.replace(str(e),"e")
if ("5853") in ab:
    ab=ab.replace(str(f),"f")
if ("2432") in ab:    
    ab=ab.replace(str(g),"g")
if ("2027") in ab:
    ab=ab.replace(str(h),"h")
if ("7024") in ab:
    ab=ab.replace(str(i),"i")
if ("828") in ab:
    ab=ab.replace(str(j),"j")
if ("798") in ab:
    ab=ab.replace(str(k),"k")
if ("593") in ab:
    ab=ab.replace(str(m),"m")
if ("662") in ab:
    ab=ab.replace(str(n),"n")
if ("5950") in ab:
    ab=ab.replace(str(l),"l")
if ("357") in ab:
    ab=ab.replace(str(o),"o")
if ("506") in ab:
    ab=ab.replace(str(p),"p")
if ("239") in ab:
    ab=ab.replace(str(q),"q")
if ("99") in ab:
    ab=ab.replace(str(r),"r")
if ("372") in ab:
    ab=ab.replace(str(s),"s")
if ("636") in ab:
    ab=ab.replace(str(t),"t")
if ("553") in ab:    
    ab=ab.replace(str(u),"u")
if ("255") in ab:
    ab=ab.replace(str(v),"v")
if ("298") in ab:
    ab=ab.replace(str(w),"w")
if ("8822") in ab:
    ab=ab.replace(str(x),"x")
if ("458")in ab:
    ab=ab.replace(str(y),"y")
if ("659") in ab:
    ab=ab.replace(str(z),"z")
if ("633") in ab:
    ab=ab.replace(str(space)," ")          
print(ab)

程序加密就好了。但是,它只会解密4个字母,而不仅仅是混乱的字母和数字。

1 个答案:

答案 0 :(得分:0)

您的“解密”不起作用,因为并非每个角色都有自己的插槽。假设密钥为1,密码为7334662的示例密文“明确”代表en。由于您的解密开始将346替换为b,因此密文将导致73b62然后终止,因为无法再替换任何内容。

对此有很多修正:

  • 您可以删除replace的使用,而是迭代密文,并尝试找到与其中一个可能的映射相对应的前缀。虽然,当你通过简单的乘法实际引入密钥时,这会很快破裂,因为那时多个映射可能具有相同的前缀。

  • 添加,等分隔符,使您能够将密文分割为,并迭代所有密文“字符”,以便将映射分别应用于明文。因此,上面的示例看起来像7334,662