Salve a tutti, oggi voglio consultarmi con voi riguardo un algoritmo di cifratura fatto da me... Vorrei sentire i vostri commenti riguardo alla sicurezza di questo.
Premetto che ci saranno dei buchi nell algoritmo, spero mi aiuterete a migliorare sia me che l'algoritmo.
Questo è il codice:
codice HTML:
def crypt(x):
matrix=[["10","00","11","10"],["00","11","01","11"],["11","01","10","00"],["01","10","00","01"]]
content=[]
message=list(x)
start=""
v1=0
l1=0
ma=""
ultimate=""
ak=""
for word in message:
ak+=str(ord(word))
ak=int(ak)
for item in message:
start+=str(bin(ord(item)))[2:len(str(bin(ord(item))))]
char=len(start)
if char%4==0:
while char>v1:
content+=[start[v1:v1+4]]
v1=v1+4
while l1<len(content):
i=content[l1][0]
j=content[l1][3]
f=content[l1][1]
g=content[l1][2]
external=str(i)+str(j)
internal=str(f)+str(g)
if external=="00":
if internal=="00":
m=matrix[0][0]
elif internal=="01":
m=matrix[0][1]
elif internal=="10":
m=matrix[0][2]
elif internal=="11":
m=matrix[0][3]
elif external=="01":
if internal=="00":
m=matrix[1][0]
elif internal=="01":
m=matrix[1][1]
elif internal=="10":
m=matrix[1][2]
elif internal=="11":
m=matrix[1][3]
elif external=="10":
if internal=="00":
m=matrix[2][0]
elif internal=="01":
m=matrix[2][1]
elif internal=="10":
m=matrix[2][2]
elif internal=="11":
m=matrix[2][3]
elif external=="11":
if internal=="00":
m=matrix[3][0]
elif internal=="01":
m=matrix[3][1]
elif internal=="10":
m=matrix[3][2]
elif internal=="11":
m=matrix[3][3]
ma+=m
l1=l1+1
key1=int(ma,2)
key2=(6364136223846793005*key1+1442695040888963407)%(2**64)
tempkey1=str(bin(key2))[0:len(str(bin(key2)))/2]
tempkey2=str(bin(key2))[len(str(bin(key2)))/2:len(str(bin(key2)))]
keystream=int(tempkey1,2)|int(tempkey2,2)
storage=content
lenght=len(content)
loop=0
if lenght%2!=0:
lenght=len(content)-1
while lenght>0:
tmplist=content[lenght-1]
content.pop(lenght-1)
content.insert(lenght-2,tmplist)
lenght=lenght-2
while loop<len(content):
tmplist2=content[loop]
content.pop(loop)
tmplist2=reversed(tmplist2)
for i in tmplist2:
ultimate+=i
content.insert(loop,ultimate)
loop=loop+1
chipertext=int(start,2)|int(ultimate,2)
chipertext=chipertext+int(start,2)+int(ultimate,2)
digit=keystream|chipertext
digit=int(str(digit),36)
tpass=str(digit)[len(str(digit))-5:len(str(digit))-1]
reversetpass=reversed(str(int(tpass)*digit+(int(tpass)*ak+1)%64))
v=""
for j in reversetpass:
v+=j
v=int(v)
digit=str(digit)
kdigit=int(digit[0:len(digit)/2])
k2digit=int(digit[len(digit)/2:len(digit)])
digit=v&kdigit
digit2=v|k2digit
digit=str(digit)+str(digit2)
digit=int(digit,36)
digit=str(hex(digit))[2:len(str(digit))-1]
return digit
else:
while (char%4)!=0:
char=char-1
extra=start[char:len(start)]
extra=int(extra,2)
start=start[0:char]
while char>v1:
content+=[start[v1:v1+4]]
v1=v1+4
while l1<len(content):
i=content[l1][0]
j=content[l1][3]
f=content[l1][1]
g=content[l1][2]
external=str(i)+str(j)
internal=str(f)+str(g)
if external=="00":
if internal=="00":
m=matrix[0][0]
elif internal=="01":
m=matrix[0][1]
elif internal=="10":
m=matrix[0][2]
elif internal=="11":
m=matrix[0][3]
elif external=="01":
if internal=="00":
m=matrix[1][0]
elif internal=="01":
m=matrix[1][1]
elif internal=="10":
m=matrix[1][2]
elif internal=="11":
m=matrix[1][3]
elif external=="10":
if internal=="00":
m=matrix[2][0]
elif internal=="01":
m=matrix[2][1]
elif internal=="10":
m=matrix[2][2]
elif internal=="11":
m=matrix[2][3]
elif external=="11":
if internal=="00":
m=matrix[3][0]
elif internal=="01":
m=matrix[3][1]
elif internal=="10":
m=matrix[3][2]
elif internal=="11":
m=matrix[3][3]
ma+=m
l1=l1+1
key1=int(ma,2)
key2=(6364136223846793005*key1+1442695040888963407)%(2**64)
tempkey1=str(bin(key2))[0:len(str(bin(key2)))/2]
tempkey2=str(bin(key2))[len(str(bin(key2)))/2:len(str(bin(key2)))]
keystream=int(tempkey1,2)|int(tempkey2,2)
storage=content
lenght=len(content)
loop=0
if lenght%2!=0:
lenght=len(content)-1
while lenght>0:
tmplist=content[lenght-1]
content.pop(lenght-1)
content.insert(lenght-2,tmplist)
lenght=lenght-2
while loop<len(content):
tmplist2=content[loop]
content.pop(loop)
tmplist2=reversed(tmplist2)
for i in tmplist2:
ultimate+=i
content.insert(loop,ultimate)
loop=loop+1
chipertext=int(start,2)|int(ultimate,2)
chipertext=chipertext+int(start,2)+int(ultimate,2)
digit=keystream|chipertext
digit=int(str(digit),36)
tpass=str(digit)[len(str(digit))-5:len(str(digit))-1]
reversetpass=reversed(str(int(tpass)*digit+(int(tpass)*ak+extra)%64))
v=""
for j in reversetpass:
v+=j
v=int(v)
digit=str(digit)
kdigit=int(digit[0:len(digit)/2])
k2digit=int(digit[len(digit)/2:len(digit)])
digit=v&kdigit
digit2=v|k2digit
digit=str(digit)+str(digit2)
digit=int(digit,36)
digit=str(hex(digit))[2:len(str(digit))-1]
return digit