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