Puncte:2

Cum să aveți o funcție hash care mapează orice șir binar de dimensiune n cu șir binar de dimensiune n?

drapel mq

Implementez criptografia fără certificat de la această lucrare de cercetare în limbajul python. În esență, vreau să am următoarea mapare a funcției hash. Această funcție hash este menționată în algoritmul de configurare din secțiunea 2.4 a lucrării. Aici n este lungimea de biți a textelor clare. $$\begin{align} H_4: \{0, 1\}^n\la\{0, 1\}^n\ \end{align}$$ Există vreo funcție hash încorporată în biblioteca hashlib python? Sau cum pot construi această funcție hash în python?

Maarten Bodewes avatar
drapel in
Această întrebare conține două părți separate: ce (tip de) algoritmi hash pot folosi și care sunt disponibili în biblioteca hashlib python. Se pare că se concentrează pe cel de mai târziu, iar asta e în afara subiectului de pe acest site, strict vorbind.
Maarten Bodewes avatar
drapel in
Este specificat [aici](https://docs.python.org/3.9/library/hashlib.html#shake-variable-length-digests) - acolo din 3.6, care este cea mai veche versiune lib încă acceptată. API-ul este atât de simplu încât nu este prea mult. Poate că ar necesita un *pic* mai multă muncă dacă *n* dvs. nu este un multiplu de 8, dar cam atât. Încercați și întrebați pe [so] când vă blocați.
Maarten Bodewes avatar
drapel in
Nu am răspuns pentru că probabil se potrivește ceva mai bine pe SO, dar sincer nu poate fi deranjat pentru a converti acea formulă într-o imagine. ashizz, te rog reacționează la răspunsurile pe care le primești aici și pe [so].
Puncte:1
drapel in

Probabil cel mai bun algoritm de utilizat este SHAKE specificat pentru Keccak, care este câștigătorul competiției SHA-3. Puteți utiliza fie SHAKE128, fie SHAKE256, în funcție de echilibrul de securitate și performanță pe care doriți să îl obțineți.

Pentru Python, algoritmul este specificat Aici și ar trebui să fie disponibil începând cu 3.6, adică toate versiunile acceptate. Puteți doar să creați algoritmul hash (sau mai degrabă XOF), apelați Actualizați de câte ori doriți pe intrarea binară și apoi recuperați rezultatul folosind digest(digestSize) sunați, unde digestSize este în octeți.


Dacă aveți nevoie de un $n$ care nu este un multiplu de 8 (adică intrarea / ieșirea nu este aliniată pe octeți) poate fi necesar să efectuați unele trucuri, de ex. prefixarea zerourilor la intrare și eliminarea biților din stânga din ieșire după aceea. Desigur, asta presupune asta $n$ nu variază sau este posibil să primiți coliziuni de mesaje de intrare. Cele mai multe protocoale practice au fost proiectate cu parametrii de intrare/ieșire aliniați la octeți.

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.