Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Python: Algoritmo di crittografia

    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

  2. #2
    Trattandosi di un algoritmo senza chiave, è semplicemente "security by obscurity", quindi la sua sicurezza è estremamente bassa (a prescindere da come possa essere implementato).

    http://en.wikipedia.org/wiki/Kerckhoffs%27_principle
    http://en.wikipedia.org/wiki/Security_through_obscurity
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Se posso ribbattere, anche sha1 ed md5 non hanno chiavi ma sono comunque abbastanza sicuri

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.