Puncte:0

Îndoială cu privire la conversia hex în octet în intrarea SHA-256

drapel br

Funcțiile hash, cum ar fi SHA-256, iau ca intrare un șir binar. Acum, având un șir hexadecimal atunci când îl convertim într-un șir de text normal, valoarea SHA-256 calculată ar fi aceeași. Aici este problema mea

Să luăm în considerare un șir simplu în hexazecimale 2E; valoarea sa SHA-256 este cdb4ee2aea69cc6a83331bbe96dc2caa9a299d21329efb0336fc02a82e1839a8.

Când este convertit în formă de octeți, ar trebui să scriem 46 sau 046. În oricare dintre cazuri, ieșirea SHA-256 nu se potrivește:

Pentru 46 ai primi 25fc0e7096fc653718202dc30b0c580b8ab87eac11a700cba03a7c021bc35b0c.

Pentru 046 ai primi b2d084ae2bd0f4b38953ea3adb009b4f059816f93392addbcfb373399f183e88.

Cum convertim de la hexazecimale la un octet, astfel încât rezultatul să fie același? Care sunt regulile? Din câte știu, SHA-256 necesită format de octeți.

am folosit asta (GitHub) software pentru calcularea valorilor SHA-256.

Aman Grewal avatar
drapel gb
Site-ul respectiv nu are o opțiune de octeți. Cum îl introduceți ca octeți?
J.Doe avatar
drapel br
există o opțiune de text în meniul drop-down. Presupun octeții săi?
fgrieu avatar
drapel ng
Întrebarea este despre SHA-256, nu despre SHA diferit (cunoscut și ca SHA-0). SHA a fost un precursor al SHA-1. S-a dovedit a fi nesigur, chiar mai mult decât SHA-1. Al doilea (respectiv al treilea) hash afișat este pentru secvența de două caractere (respectiv trei caractere) `46` (respectiv `046`) când este codificat la cât mai mulți octeți per ASCII sau UTF-8, adică octeți 0x34 0x36 (respectiv 0x30 0x34 0x36) unde prefixul 0x este pentru hexazecimal.
Puncte:7
drapel in

Să luăm în considerare un șir simplu în Hex: 2E Valoarea sa SHA este:

cdb4ee2aea69cc6a83331bbe96dc2caa9a299d21329efb0336fc02a82e1839a8

Da este corect.

Când este convertit în formă de octeți, ar trebui să scriem 46 sau 046.

Nici.

Întreaga idee de a folosi hexazecimale pentru octeți este de a reprezenta valoarea octeților. Asa de 2E este reprezentarea hexazecimală a unui singur octet. Puteți folosi și alte reprezentări, cum ar fi 00101110 în binar.

Dacă îl interpretați ca text ASCII, ar fi caracterul „punct”. Asa de printf „\x2E” | sha256sum este la fel ca printf "." | sha256sum pe majoritatea sistemelor. Deci, pe site-ul dvs., puteți utiliza pur și simplu un singur punct ca text. De asemenea, este posibil să faceți acest lucru folosind ecou dar ecou are prea multe probleme de portabilitate pentru a fi considerată o alternativă de încredere printf.

În general, nu reprezentăm octeți folosind zecimale. Dacă o faci, probabil va trebui să-l programezi în mod specific. De exemplu, în Java ați putea folosi octet b = 46 sau octet[] ba = { 46 } și apoi utilizați asta într-un algoritm hash.Dacă chiar doriți să-l programați folosind linia de comandă, atunci printf „\x$(printf „%x” 46)” | sha256sum pare să funcționeze.

J.Doe avatar
drapel br
mulțumesc. Dar când inițializam datele, adică w[i] înainte de a rula algoritmul, ce facem, deoarece datele necesare sunt în octeți, variabilele (w[i] fiind de 32 de biți)? Schimbăm datele în binare și apoi atribuim sau lucrăm direct pe Hex, stocându-le în w[i]-uri în format hex. Nu cred că acesta din urmă ar funcționa și ar da hash-ul corect?
J.Doe avatar
drapel br
Încerc să scriu SHA256 de la zero și această parte este teribil de confuză. Restul logicii pare în regulă. Să presupunem că textul în Hexa este: 2E 2F 05 EE care urmează să fie populat în W[0]. Cum procedăm și care ar fi valoarea lui?
Maarten Bodewes avatar
drapel in
În mod normal, creăm o interfață folosind octeți pentru funcția hash SHA-256. În acest caz, valoarea `2E 2F 05 EE` în octeți va fi convertită într-un singur cuvânt `0x2E2F05EE` când se analizează implementarea SHA-256. Dar vă rugăm să rețineți că SHA-256 este definit ca folosind **big** endian.Nu ar trebui **niciodată** să utilizați hexazecimale create dintr-un șir, doar octeți și cuvinte. Hexazecimalele sunt utile doar pentru depanare (depanatorul le poate folosi, desigur, și le puteți folosi în declarații de tipărire sau urmărire de depanare), nu ar trebui să le utilizați niciodată pentru implementarea în sine.
Maarten Bodewes avatar
drapel in
Puteți doar *muta valoarea octetului în locul potrivit, folosind `
Puncte:0
drapel ng
SSA
  • Element din listă

Am folosit python pentru a scoate diferența, când luați 2E și doar codați ca octet și dați octetul codificat ca b'2E'.

  • python are o metodă bytes.fromhex() de ex..
  • v=bytes.fromhex('474039')
  • aici v este tipărit ca b'G@9'
  • Pentru a decoda folosiți binascii.hexlify(v), iar ieșirea va fi b'474039' introduceți descrierea imaginii aici

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.