Ceea ce mă întreb este dacă acest lucru se poate face în cealaltă direcție, pentru a obține lungimea datelor originale de text simplu dat textului cifrat.
RC5 este un cifru bloc; ceea ce întrebați este despre modul de criptare bloc (și ce umplutură folosește acea implementare); nu există suficiente informații pentru a răspunde la întrebarea dvs. specifică; totusi am o presupunere.
Un „cifr de bloc” este o transformare inversabilă dintr-un șir de biți de n biți (în acest caz, $n=64$) la un șir de biți de n biți. Ceea ce face un „mod de criptare bloc” este că „cifrul bloc” și îl folosește într-un mod pentru a face o operație mai utilă în general, de exemplu, criptarea unui text simplu de lungime arbitrară.
Acum, aruncând o privire la cod, s-ar părea că codul folosește „modul ECB” pentru a cripta șirul (ceea ce este, în general, o alegere proastă - desigur, asta nu este problema ta). Cu „modul ECB”, modul în sine poate gestiona doar texte clare care au lungimea unui multiplu al lungimii blocului (în acest caz, 16 octeți). Deoarece, în general, dorim să gestionăm textele cu lungime arbitrară, ceea ce facem este să adăugăm „padding”, adică niște lucruri suplimentare la sfârșit pentru a face ca lungimea să fie un multiplu de 16 octeți (pe care modul îl poate gestiona apoi).
Această umplutură este concepută astfel încât să ușureze îndepărtarea căptușelii la momentul decriptării - totuși există mai multe posibilități, iar codul de decriptare pe care l-ați dat nu ne spune care este utilizat. În modul cel mai obișnuit, ultimul octet este folosit pentru a semnifica numărul de octeți de completare care au fost adăugați - poate doriți să vedeți dacă acesta este cazul în exemplele dvs.