Puncte:2

Care sunt primii biți ai unui șir de biți, de exemplu, generați folosind SHA-256?

drapel ve

Am un șir care generează din SHA-256

x = fea5f97f9ca1e1a0a2ae344f4e12a3ab0c4d9221e6bb5d70bc567e39f8fbc3d5

Care sunt primii 10 biți de valoare X?

drapel et
Ieșirea pare a fi hexazecimală. Fiecare caracter aici este stocat pe 4 biți. Aveți nevoie de 2 și 1/2 caractere pentru a obține 10 biți
Puncte:2
drapel ng

Titlul întrebării (acum) întreabă „Care sunt primii biți dintr-un șir de biți”. Acest lucru nu este ambiguu dacă biții sunt prezentați individual într-o ordine cronologică sau în scris într-un context în care există o ordine convențională de citire, cum ar fi de la stânga la dreapta.

Dar corpul întrebării este despre „un șir care generează din sha256”. Acesta trebuie citit ca SHA-256, definit de FIPS 180-4. Este un algoritm care scoate un „șir de biți” de $256$ biți și nu sunt identificabili imediat.

Corpul întrebării are x = urmat de $64$ caractere din toate fie cifre, fie litere A la f (în litere uniforme, aici litere mici), adică $16=2^4$ personaje. Asta sugerează că rezultatul SHA-256 este codificat hexazecimal, cu fiecare caracter codând 4 biți (notă $256=64\times4$). Aceasta este una dintre mai multe reprezentări comune ale șirurilor de biți ca caractere.

Există mai multe moduri diferite și incompatibile de a converti hexazecimal în biți, dar, din fericire, în cazul SHA-256, una este specificată în 3.1 subparagraful 2 din pagina marcată 7 din FIPS 180-4 (de citit obligatoriu). În rezumat, cei mai importanți biți sunt primii, fie la nivelul nibble (4 biți), octet (8 biți) sau cuvânt (32 biți în cazul SHA-256).

Astfel pentru a găsi primul $i$ biți pentru hash-ul SHA-256 dat, putem

  • Verifică asta $0\le i\le256$, altfel ceea ce se cere este nedefinit.
  • Ia primul $\lceil i/4\rceil$ personaje (unde $\lceil r\rceil$ cu $r\in\mathbb R$ este cel puțin cel mai mic număr întreg $r$); Aici $i=10$, prin urmare $\lceil i/4\rceil=3$, astfel luăm fea
  • Scrieți fiecare dintre aceste caractere (în ordinea citirii) ca 4 cifre binare per convenție big-endian, per
    0 -> 0000 4 -> 0100 8 -> 1000 c -> 1100
    1 -> 0001 5 -> 0101 9 -> 1001 d -> 1101
    2 -> 0010 6 -> 0110 a -> 1010 e -> 1110
    3 -> 0011 7 -> 0111 b -> 1011 f -> 1111
    
  • Asta rezultă într-un șir de $4\,\lceil i/4\rceil$ biți (aici cei 12 biți 111111101010), dintre care păstrăm primul $i$ biți (aici 1111111010).

Acest lucru se aplică tuturor hashurilor din familia SHA (înlocuind $256$ cu lăţimea lor de ieşire). În absența altor specificații, este rezonabil să o aplicați altor hash-uri standard, a căror lățime de ieșire este un multiplu de $32$ (sau chiar $8$ sau $4$) biți. Acest lucru este discutabil pentru MD5, deoarece folosește puțin-endian convenție în ordinea octeților în cadrul a $32$-bit cuvânt.Și nu l-aș extinde orbește la alte cantități utilizate în criptografie și reprezentate, de asemenea, în hexazecimal, cum ar fi numerele întregi așa cum sunt utilizate în RSA.

Puncte:0
drapel in

Deoarece este vorba despre programare și trebuie să fie închis sau migrat, aici în Python cu big-endian;

def LSBBits( hexData, lsbs):

    scară = 16 ## este egal cu hexazecimal

    inBinary = bin(int(my_hexdata, scale))[2:]
    inBinary = inBinary.zfill(256)
    returnează înBinary[len(inBinary)-lsbs:]

def MSBBits( hexData, mbsb):

    scară = 16 ## este egal cu hexazecimal

    inBinary = bin(int(my_hexdata, scale))[2:]
    inBinary = inBinary.zfill(256)
    returnează înBinary[:mbsb]

my_hexdata = „fea5f97f9ca1e1a0a2ae344f4e12a3ab0c4d9221e6bb5d70bc567e39f8fbc3d5”


print( LSBBits(datele_mei_hex, 10))
print(MSBBits(datele_mei_hex, 10))

Și iese programul.

1111010101
1111111010

Mare și mic-endianism este alta poveste. NIST presupun că este mare.

fgrieu avatar
drapel ng
Mă tem că acest răspuns este despre partea off-topic a întrebării.
kelalaka avatar
drapel in
@fgrieu Mă așteptam la o migrație...Da, din cauza unui artefact, zfill-ul a fost cauzat, a fost eliminat, mulțumesc.

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.