În general, dorim ca rezultatul de criptare să arate aleatoriu, așa că mă îndoiesc că există orice funcție de criptare așa cum doriți.
Dar cred că îți poți atinge obiectivul printr-un proces în două etape.
- Criptați datele folosind AES, folosind un mod adecvat, cum ar fi CBC sau GCM. Această etapă este responsabilă de securitate.
- Convertiți fiecare bloc de text cifrat AES în forma de care aveți nevoie. Aici puteți utiliza orice algoritm care convertește un număr întreg de 128 de biți într-un format vectorial care se potrivește obiectivului dvs. Probabil ar fi convenabil dacă acesta poate gestiona blocuri de 128 de biți, dar dacă acesta este prea mare, puteți împărți blocul în (să zicem) patru blocuri de 32 de biți și puteți gestiona fiecare dintre blocurile mai mici separat. Destinatarul ar converti apoi fiecare vector înapoi în blocuri de 32 de biți și va concatena patru blocuri succesive de 32 de biți pentru a recrea blocul original de text cifrat AES de 128 de biți și va alimenta acel bloc în algoritmul de decriptare AES corespunzător. Această etapă convertește doar datele în formatul dorit și nu are scopul de a adăuga nicio securitate.
Ca exemplu de algoritm de etapa 2, să presupunem că dorim ca rezultatul nostru să fie valoarea y în polinom y = x2 + 3. Deci luăm blocul nostru de text cifrat AES de 128 de biți c ca număr întreg, calculează o = c2 + 3, apoi utilizați o ca rezultat final. (Bănuiesc că acest exemplu nu este tocmai ceea ce țintiți, dar sper să vă îndrepte într-o direcție adecvată).
Notă: asigurați-vă că algoritmul de conversie este inversabil (deci orice intrare o poate fi convertit în mod unic înapoi la original c) sau decriptarea nu va funcționa corect.