Puncte:1

Este posibil să se calculeze lungimea textului simplu a unui text cifrat RC5-32?

drapel sz

Calcularea dimensiunii criptate RC5 a oricăror date este la fel de simplă ca rotunjirea lungimii textului simplu la cel mai apropiat multiplu de 8. Ceea ce mă întreb este dacă acest lucru se poate face în cealaltă direcție, pentru a obține lungimea datelor inițiale în text simplu date. textul cifrat.Evident, această informație nu este dezvăluită până când decriptarea are loc, dar poate fi urmărită/calculată pe parcursul procesul de decriptare?

Lucrez cu acest implementarea decriptării RC-5 (binar C++ decompilat, reimplementat în C#), care decriptează datele în grupuri de 4 octeți și copiază rezultatul în buffer-ul de ieșire. Problema este că există o mulțime de gunoi în tamponul de ieșire după sfârșitul datelor decriptate, așa că este greu de determinat unde se termină de fapt datele. Este ușor dacă textul simplu este un șir terminat cu nul, dar caut o soluție mai generică care să poată funcționa pe date binare arbitrare.

Puncte:2
drapel my

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.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.