Non è possibile che una moderna libreria di crittografia funzioni sui caratteri. Tutti i codici moderni sono definiti per operare su byte (alcuni sono definiti per operare su bit, ma la maggior parte delle biblioteche assumerà che un byte sia l'unità minima di dati). Se la tua libreria accetta stringhe carattere allora saranno convertite in byte all'interno. Nota che ad es. std:string
fa not deve contenere stringhe di caratteri, può contenere anche stringhe di byte (stringhe a.k.a. ottetto).
D'altra parte la maggior parte delle librerie di crittografia utilizza l'intera gamma dello spazio delle chiavi. Ciò significa che i byte che compongono la chiave possono avere qualsiasi valore. Quindi, finché la chiave codificata 64 di base ha una dimensione di chiave valida, potrebbe essere accettata. In questo caso l'unico problema è che base64 conterrà 3/4 dell'entropia di una chiave completamente casuale. Quindi se hai una chiave AES a 192 bit verrà convertita in una chiave AES 256 bit. In tal caso non dovresti rivendicare la sicurezza a 256 bit, dato che la quantità di chiavi possibili nel tuo schema è ancora 2 ^ 192.
Se la libreria di crittografia stessa decodifica base64, la chiave viene prima convertita 1: 1 in base64 e quindi nuovamente nella chiave originale. Ovviamente in questo caso base64 non fa differenza. Ci si aspetterebbe che la conversione da base64 o esadecimali sia ben documentata per la libreria.
Sembra che ci siano preziose informazioni disponibili per Synercoding.Encryption: non è un buon segno.
Se la chiave non è una chiave ma una password inserita in PBKDF2, è sufficiente fornire sufficiente entropia. Se questo viene inserito direttamente in PBKDF2 o se viene prima codificato come base64 non fa differenza.
Abbastanza divertente per una funzione basata su password PBKDF2 è anche definito per operare su byte. L'API dovrebbe quindi anche specificare la codifica dei caratteri. Di solito è compatibile con ASCII, quindi è probabile che la base 64 funzioni. Può anche essere usato come una sorta di livello di compatibilità tra le implementazioni di PBKDF2.