Ultimamente, ho letto della crittografia e ho pensato ad un metodo per utilizzare gli hash per crittografare i dati. Da quello che so, gli hash sono unici per ogni oggetto e sono funzioni unidirezionali. La crittografia, d'altro canto, è a due vie. La crittografia si basa su una chiave per decrittografare i dati crittografati. Questa chiave è la chiave (nessun gioco di parole previsto) per la forza della crittografia. Come è creato è tutto. Quello che mi chiedo è che si potrebbe modificare i dati usando un hash di una passphrase, per creare una crittografia sicura? Ad esempio:
- Hai una stringa di dati.
- Genera un hash di una passphrase.
- Combini i caratteri corrispondenti dell'hash e dei dati insieme i.e
[data = asdfgh] + [hash = qwertyuiop] --- > risultato = ÒêÉØÛá
Nota: questo è solo un esempio di come potresti usare l'hash per modificare i dati. Il punto principale è che si modificano i dati in modo semplice con l'hash: addizione, sottrazione, ORing, ecc. Si ottiene il punto.
Dopo averlo crittografato, puoi eliminare l'hash. Per decrittografarlo, tutto ciò che devi fare è invertire l'operazione usando la stessa funzione di hashing e salt. Tutto ciò che serve è la passphrase utilizzata per l'hash originale.
Sembra che funzionerebbe, perché se gli hash sono veramente unici, l'unico modo, sembra, senza forzatura bruta, di decodificare i dati sarebbe di usare lo stesso hash di quello che hai usato per crittografarlo.
Questo sembra troppo semplice, e dato che sono un noob in questo settore, sono sicuro che ci sono dei difetti di sicurezza. C'è qualcosa di intrinsecamente insicuro su questo?
Grazie
Nel caso in cui desideri un codice vero e proprio, ecco un rapido programma python che ne dimostra esattamente il contenuto:
#Encryption Test
import hashlib
class Key:
def __init__(self, passphrase):
self.passphrase = passphrase.encode('utf-8')
self.salt = 'battery horse staple'.encode('utf-8')
def hash_key(self):
return hashlib.sha256(self.passphrase + b';' + self.salt).hexdigest()
class EDObject:
def __init__(self, edobject):
self.edobject = edobject
self.result_l = []
def encrypt(self, key):
#Add the decimal values of key (hash) and object together.
for i in range(len(self.edobject)):
self.result_l.append(chr(ord(self.edobject[i])+ord(key.hash_key()[i])))
return ''.join(self.result_l)
def decrypt(self, key):
#subtract the decimal values of the key from the encrypted object
for i in range(len(self.edobject)):
self.result_l.append(chr(ord(self.edobject[i])-ord(key.hash_key()[i])))
return ''.join(self.result_l)
if __name__ == '__main__':
o = EDObject(input('object:'))
k = Key(input('pass:'))
if input('e/d:') == 'e':
#Encrypt
print(o.encrypt(k))
else:
#Decrypt
print(o.decrypt(k))