【原创】使用勾股定理对字符串进行加密

使用勾股定理对字符串进行加密

格式要求(敲黑板):密钥(a)的数值和明文(b)的长度相加不能超过0x80(128),最大加密字符长度为59

在一个直角三角形中,分别有2个 直角边(a,b)和一个斜边(c)。

他们的对应关系为:a²+b²=c²

加密:

例如一个字符串 “helloworld~” (明文),密钥为40,那么加密后应该为: `]ddhphkd\w(代码如下图)

import math

a=40

b=0

c=‘helloworld~’

chr_b=

for i in
range(0,len(c)):

b=math.sqrt(ord(c[i])**2a**2)

chr_b+=chr(int(round(b)))

print chr_b

但是这样有一个问题,他和凯撒密码加密后的结果类似(凯撒密码为偏移-8位):

#-*-coding=utf8-*-

import math

c=‘helloworld~’

b=

def
ggenc(value):

a=40

b=0

chr_b=


for i in
range(0,len(c)):

b=math.sqrt(ord(c[i])**2a**2)

chr_b+=chr(int(round(b)))


return chr_b

def
kaisaenc(value):

a=-8

b=


for i in c:

b+=chr(ord(i)+a)


return b

b=ggenc(c)

print
勾股定理:’,b

b=kaisaenc(c)

print
凯撒密码:’,b

可以将a的边长,也就是将密钥的值变成动态的(例如每次-1),当密钥的值变更时,他们的结果就不一致了,问题解决

测试代码如下:

#-*-coding=utf8-*-

import math

c=‘helloworld~’

b=

def
ggenc(value):

a=40

b=0

chr_b=


for i in
range(0,len(c)):

b=math.sqrt(ord(c[i])**2a**2)

chr_b+=chr(int(round(b)))

a=a1


return chr_b

def
kaisaenc(value):

p=0
#p
代表a变动的幅度

a=-8

b=


for i in c:

# b+=chr(ord(i)+a)

b+=chr(ord(i)+ap)

p+=1


return b

b=ggenc(c)

print
勾股定理:’,b

b=kaisaenc(c)

print
凯撒密码:’,b

解密:

还原的过程和加密的类似,

以 `]eeirjmg_z为例,a依旧为40,看看是否可以还原到helloworld~

解密代码如下:

import math

b=‘`]eeirjmg_z’

c=

def
ggdec(value):

a=40

c=0

chr_c=


for i in
range(0,len(b)):

c=math.sqrt(ord(b[i])**2+a**2)

chr_c+=chr(int(round(c)))

a=a1


return chr_c

c=ggdec(b)

print c

整个流程的导图如下:


附一个完整的脚本(文章结束提供下载):

import math

def encode(value):

a=input()

b=0

chr_b=
for i in range(0,len(c))

b=math.sqrt(pow(ord(c[i]),2)-pow(a,2))

chr_b+=chr(int(round(b)))

a=a1
print chr_b

def decode(value):

a=input()

c=0

chr_c=
for i in range(0,len(b)):

c=math.sqrt(pow(ord(b[i]),2)+pow(a,2))

chr_c+=chr(int(round(c)))

a=a1


print chr_c

choose=“”

print(“Please choose your num for your want:\n)

print(“1.encode\n)

print(“2.decode\n:”)

choose=raw_input()

if choose==“1”:

print(“Please enter the characters that need to be encrypted(max:59 char):”

c=raw_input()

print(“Please enter the key(“+str(9+len(c))+”-“+str(127-len(c))+“:)\n)
encode(c)

elif choose==“2”:
print(“Please enter the characters that need to be decrypted:”

b=raw_input()
print(“Please enter the key(0-128):\n)

decode(b)

else:

print(“Please choose \’1\’ or \’2\’ !!!”)

加解密脚本下载地址:code

本文为原创文章,转载需备注。

发表评论

电子邮件地址不会被公开。 必填项已用*标注