Mi chiedo come sia possibile implementare la crittografia one-time pad nel mio codice.
Io uso le pagine a 16 byte al momento e l'implementazione in Golang dalla pagina: link (la riga 83 è il metodo Encrypt()
).
Tuttavia, i dati che ho bisogno di crittografare a volte (non sempre) sono più grandi di 16 byte.
// Page must be at least as long as plain text
if len(page) < len(payload) {
return nil, fmt.Errorf("otp: insufficient page size")
}
result := make([]byte, len(payload))
for i := 0; i < len(payload); i++ {
plainText := int(payload[i])
secretKey := int(page[i]) // ln 95
cipherText := (plainText + secretKey) % 255
result[i] = byte(cipherText)
}
Quello che ho fatto è stato il controllo della lunghezza della pagina, quindi la crittografia ora ignora il problema della lunghezza; utilizzando il modulo durante l'indicizzazione di page
(riga 95):
secretKey := int(page[i % len(page)])
Quindi, se cifro il buffer dei dati dice 10 megabyte, è ancora sicuro, e in caso contrario, perché?