Puncte:0

Comprimați SHA256 pentru a fi un ID viabil al bazei de date?

drapel de

Nu știu multe despre criptografie, așa că am nevoie de ajutor în acest sens.

Aș dori să folosesc un șir SHA256 ca id unic în baza mea de date pentru utilizatori, dar scalarea ar fi dificilă.

Este posibil să convertiți un șir SHA256 într-o versiune unică mai scurtă, care să nu se ciocnească (sau să se ciocnească foarte rar)?

Ar putea trece șirul SHA256 prin CRC32, FNV164 sau ADLER32 o opțiune viabilă în acest caz?

kelalaka avatar
drapel in
CRC nu este o opțiune. Cât de mult ai de gând să [trunci formularul SHA-256](https://crypto.stackexchange.com/q/64314/18298)? Care este _metrica_ rarelor pentru tine? De ce nu puteți accepta ieșirea pe 256 de biți? Ai miliarde de utilizatori? Nu există nicio garanție de unicitate din partea funcțiilor hash. Puteți verifica [UUID-urile](https://datatracker.ietf.org/doc/html/rfc4122)
Puncte:2
drapel kr

Cred că aceasta este o problemă XY și de fapt ar trebui postată la Software Engineering SE. Scopul descris în OP, generarea de ID-uri de utilizator, poate fi rezolvat fără nicio criptografie.

1. Scalare

Scalare este relevantă atunci când sarcina poate crește în mod esențial într-un timp scurt. Dar un nou ID de utilizator este necesar doar pentru utilizatorii noi. În mod normal, un utilizator ar avea nevoie de 1 până la 5 minute pentru înregistrare. Astfel, nu ați avea mai mult de 1 ID nou per utilizator pe minut.

Multe baze de date oferă generatoare de ID. PostreSQL, MariaDB, Oracle oferă generatoare numite „secvențe”. MySQL oferă un ID autoincremental. Nu numai că este rapid atunci când este utilizat simplu, dar aceste baze de date oferă o optimizare suplimentară a performanței, cum ar fi grupuri de ID-uri. Platforme precum Java și C# se integrează bine cu aceste generatoare de ID. Practic, generarea unui nou ID înseamnă doar incrementarea unui număr întreg, iar cererile de bază de date sunt necesare foarte rare.

Exemplu: Să presupunem că utilizați PostgreSQL și secvența cu un grup de 10 000 de ID-uri.Să presupunem că cererea de la aplicație către baza de date pentru a reîmprospăta intervalul de pool durează 10 ms. Astfel, puteți genera 1 000 000 de ID-uri noi pe secundă pentru fiecare instanță de aplicație (adică per nod de cluster, per pod Kubernetes sau similar). Acest generator va produce în 2 ore atâtea ID-uri câte oameni există în întreaga lume.

Evident, dacă se folosește un astfel de generator standard de ID de utilizator, nu va fi un blocaj.

2. Scurtarea

Câte date veți stoca per utilizator? 1K, 10K, 100K? Să presupunem că aveți 1.000 de date per utilizator. Să presupunem că aveți la fel de mulți utilizatori ca Facebook sau Twitter. Astfel, 4 octeți pentru ID vor fi suficienți. Trunchierea SHA-256 de la 32 la 4 octeți economisește 28 de octeți per utilizator, economii de stocare cu mai puțin de 3%. Astfel, complexitatea de a găsi un algoritm pentru transformarea lui SHA-256 la 4 octeți fără multe coliziuni, eforturile de a-l implementa corect, eforturile de a implementa manipularea pentru cazurile în care apar coliziuni, eforturile de remediere a erorilor și, astfel, costurile totale. a unei astfel de soluții poate fi mult mai mare decât costurile de 3% din stocarea economisită. Calculează-l și apoi vei ști dacă are sens în cazul tău.

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.