Score:0

สงสัยเกี่ยวกับการแปลง hex เป็น byte ในอินพุต SHA-256

ธง br

ฟังก์ชันแฮช เช่น SHA-256 รับสตริงไบนารีเป็นอินพุต ตอนนี้กำหนดสตริงฐานสิบหกเมื่อเราแปลงเป็นสตริงข้อความปกติ ค่า SHA-256 ที่คำนวณได้จะเหมือนกัน นี่คือปัญหาของฉัน

ให้เราพิจารณาสตริงอย่างง่ายในเลขฐานสิบหก 2E; ค่า SHA-256 ของมันคือ cdb4ee2aea69cc6a83331bbe96dc2caa9a299d21329efb0336fc02a82e1839a8.

เมื่อแปลงเป็นรูปแบบไบต์เราควรเขียน 46 หรือ 046. ไม่ว่าในกรณีใด เอาต์พุต SHA-256 ไม่ตรงกัน:

สำหรับ 46 คุณจะได้รับ 25fc0e7096fc653718202dc30b0c580b8ab87eac11a700cba03a7c021bc35b0c.

สำหรับ 046 คุณจะได้รับ b2d084ae2bd0f4b38953ea3adb009b4f059816f93392addbcfb373399f183e88.

เราจะแปลงจากเลขฐานสิบหกเป็นไบต์ได้อย่างไรเพื่อให้ผลลัพธ์เหมือนกัน กฎคืออะไร? เท่าที่ฉันรู้ SHA-256 ต้องการรูปแบบไบต์

ฉันเคยใช้ นี้ (GitHub) ซอฟต์แวร์สำหรับคำนวณค่า SHA-256

Aman Grewal avatar
gb flag
ไซต์นั้นไม่มีตัวเลือกไบต์ คุณป้อนเป็นไบต์ได้อย่างไร
J.Doe avatar
br flag
มีตัวเลือกข้อความในแบบเลื่อนลง ฉันถือว่าไบต์ของมัน?
fgrieu avatar
ng flag
คำถามเกี่ยวกับ SHA-256 ไม่ใช่ SHA อื่น (หรือที่เรียกว่า SHA-0) SHA เป็นสารตั้งต้นของ SHA-1 กลายเป็นว่าไม่ปลอดภัย ยิ่งกว่า SHA-1 แฮชที่สอง (ตอบสนองที่สาม) ที่แสดงเป็นลำดับสองอักขระ (ตอบสนองสามอักขระ) `46` (ตอบสนอง `046`) เมื่อเข้ารหัสเป็นจำนวนไบต์ต่อ ASCII หรือ UTF-8 นั่นคือไบต์ 0x34 0x36 (resp. 0x30 0x34 0x36) โดยที่ 0x นำหน้าเป็นเลขฐานสิบหก
Score:7
ธง in

ให้เราพิจารณาสตริงง่ายๆ ใน Hex: 2E ค่า SHA ของมันคือ:

cdb4ee2aea69cc6a83331bbe96dc2caa9a299d21329efb0336fc02a82e1839a8

ใช่ที่ถูกต้อง.

เมื่อแปลงเป็นไบต์เราควรเขียน 46 หรือ 046

ไม่ใช่ทั้งสองอย่าง.

แนวคิดทั้งหมดของการใช้เลขฐานสิบหกสำหรับไบต์คือการแสดงค่าของไบต์ ดังนั้น 2E คือการแสดงเลขฐานสิบหกของหนึ่งไบต์ คุณสามารถใช้ตัวแทนอื่น ๆ เช่น 00101110 ในไบนารี่

หากคุณตีความว่าเป็นข้อความ ASCII จะเป็นอักขระ "จุด" ดังนั้น พิมพ์f "\x2E" | sha256sum ก็เหมือนกับ พิมพ์f "." | sha256sum ในระบบส่วนใหญ่ ดังนั้นบนไซต์ของคุณ คุณสามารถใช้จุดเดียวเป็นข้อความได้ นอกจากนี้ยังสามารถทำได้โดยใช้ เสียงสะท้อน แต่ เสียงสะท้อน มีปัญหาด้านการพกพามากเกินไปที่จะพิจารณาเป็นทางเลือกที่เชื่อถือได้ พิมพ์ฉ.

โดยทั่วไป เราจะไม่แสดงไบต์โดยใช้ทศนิยม ถ้าคุณทำ คุณอาจจะต้องตั้งโปรแกรมไว้โดยเฉพาะ ตัวอย่างเช่นใน Java คุณสามารถใช้ ไบต์ b = 46 หรือ ไบต์ [] บา = { 46 } แล้วใช้ในอัลกอริทึมแฮชหากคุณต้องการตั้งโปรแกรมโดยใช้บรรทัดคำสั่งจริงๆ printf "\x$(printf "%x" 46)" | sha256sum ดูเหมือนว่าจะทำงาน.

J.Doe avatar
br flag
ขอบคุณ. แต่เมื่อเราเริ่มต้นข้อมูล เช่น w[i]'s ก่อนรันอัลกอริทึม เราจะทำอย่างไรเนื่องจากข้อมูลที่ต้องการมีหน่วยเป็นไบต์โดยตัวแปร (w[i]'s) เป็น 32 บิต) เราเปลี่ยนข้อมูลเป็นไบนารีแล้วกำหนด หรือเราทำงานโดยตรงกับ Hex โดยจัดเก็บในรูปแบบ w[i] ของ hex ฉันไม่คิดว่าอย่างหลังจะใช้งานได้และให้แฮชที่ถูกต้อง
J.Doe avatar
br flag
ฉันกำลังพยายามเขียน SHA256 ตั้งแต่เริ่มต้นและส่วนนี้สับสนอย่างมาก ตรรกะที่เหลือดูดี.. สมมติว่าข้อความใน Hexa คือ: 2E 2F 05 EE ที่จะเติมใน W[0] เราจะจัดการกับมันอย่างไร และจะมีมูลค่าเท่าใด ?
Maarten Bodewes avatar
in flag
โดยปกติเราจะสร้างอินเทอร์เฟซโดยใช้ไบต์สำหรับฟังก์ชันแฮช SHA-256 ในกรณีนั้น ค่า `2E 2F 05 EE` ในหน่วยไบต์จะถูกแปลงเป็นคำเดียว `0x2E2F05EE` เมื่อดูการใช้งาน SHA-256 แต่โปรดทราบว่า SHA-256 หมายถึงการใช้ **big** endianคุณควร **ไม่** ใช้เลขฐานสิบหกที่สร้างจากสตริง ใช้เฉพาะไบต์และคำ เลขฐานสิบหกมีประโยชน์สำหรับการดีบั๊กเท่านั้น (แน่นอนว่าดีบักเกอร์สามารถใช้ได้ และคุณสามารถใช้ในการพิมพ์ดีบั๊กหรือคำสั่งการติดตาม) คุณควร **ไม่** ใช้สำหรับการนำไปใช้เอง
Maarten Bodewes avatar
in flag
คุณสามารถ *เลื่อนค่าไบต์ไปยังตำแหน่งที่ถูกต้องโดยใช้ `
Score:0
ธง ng
SSA
  • รายการ

ฉันใช้ python เพื่อแสดงความแตกต่าง เมื่อคุณใช้ 2E และเข้ารหัสเป็นไบต์และให้ไบต์ที่เข้ารหัสเป็น b'2E'

  • หลามมีเมธอด bytes.fromhex() สำหรับ เช่น..
  • v=bytes.fromhex('474039')
  • ที่นี่ v ถูกพิมพ์เป็น บีจี@9'
  • ในการถอดรหัสให้ใช้ binascii.hexlify(v) และเอาต์พุตจะเป็น ข'474039' ป้อนคำอธิบายรูปภาพที่นี่

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา