วิธีการเทียบค่า hex แบบ bit ต่อ bit

ประเด็นคือทำการบ้านแล้วมันมีการให้เปรียบเทียบค่า Hash เทียบกัน bit ต่อ bit ซึ่งปกติเวลาเราใช้คำสั่ง openssl dgst ตามด้วย algorithm ของ hash function เนี่ย มันจะให้ค่าออกมาเป็นค่า hex (เลขฐาน 16) ซึ่งจะเอาค่า hex มาเทียบกับ bit ต่อ bit เกรงว่าจะทำไม่ได้นะ คิดไปคิดมา คิดไม่ออกแล้ว เอาวิธีลูกทุ่งนี่แหล่ะ แปลงเป็น binary ก่อน แล้วก็เรียงเทียบกันเลย จึงเขียนเป็น python แบบง่ายๆ ดังนี้ครับ

หลักๆ คือ ยัดค่า hash ใส่เข้าไป แล้วใช้ function ใน python จะแปลงเป็น binary และ fill ให้เต็มในแต่ละ hash algorithm พอหากใช้ convert ธรรมดามันจะตัด 000 ข้างหน้าออก

เวลาใช้ก็

[python]

comparehex(‘md5’, ‘bbe5ce1935a7ea138745c5db953412d6’, ‘7179fa88b36f43329135d91d3603cf5d’)
comparehex(‘md5′, ’99c2a0acaac1229ff3fd9f95fae8bcc1′, ’74ab7662aaad26a499c2947f9f2d02cf’)
comparehex(‘md5’, ‘4de1453ac3e36d6b2d246c6298b5a530’, ‘faf1b7c26bcae7bba2a039ccbb37c277’)
comparehex(‘md5’, ‘0de602a9cc8f3077ccf18895767e7235’, ‘2910f9099f9bd2a82c269d705255bfd2’)
comparehex(‘sha1’, ‘b05aa01cefddab3cffcc2191af246f0956e05353’, ‘127750698bc1f6d2cfccbd1d5191ee0e18313312’)
comparehex(‘sha1’, ‘145accf73afe6bf9e461a1deeb961749187af380′, ’56c80a6a4bb1ca2917f7ddaeabe6e91725b9c38d’)
comparehex(‘sha1′, ’65f5b43a66878c6f1027a85d1475f7785b905f98’, ‘375aba2f627ff397794edf08dac632a8d44d56ca’)
comparehex(‘sha1’, ‘d176c96c05ac31733da3d9d1cf369635dbe35f24’, ‘d0f86cca4c2bf43df1935941bbe6fd3bec1f71a0’)
comparehex(‘sha256’, ‘1f1e8cfea9feb106941481ba1812071e14405c0d02d9f5e6b5040ad94106466d’, ‘d625d1b79fcaa7eef8dd363598be45561b63f5fff6a61c17ecec71ba147e1b05’)
comparehex(‘sha256’, ‘7ebee0eeb6566f10d68a5a3a82e6bdf0a76542e3eb33484355a2759f6baecbbc’, ‘d6ebd87d9fdcfa2e952ac2456fc8edfd3ecddcf3293bf8196088d223e5192e53’)
comparehex(‘sha256’, ‘298f0a9d0ef5fd8ae3b6b2e1c99afc7d41d6dfc69831e35c3c9bf5164697efbd’, ‘aee93b5ff623d8eb0d6ef48bbc8ac27623c87c891f48f62601c1298c4404cc7a’)
comparehex(‘sha256’, ‘1f9adbba1381ee8c8cc0556ded63d5ee8cf9ae7134073cc4ce765fe91ba84a81’, ‘f28da1913dfa1a2a25fed49bbb01d079aa2d18fb046e4e13bb3f58f83afa708f’)

[/python]

 

แล้วก็ลองรันไฟล์ดู จะได้ผลลัพท์ประมาณนี้ครับ

[shell]
Algorithm:  md5
H1:  bbe5ce1935a7ea138745c5db953412d6
H2:  7179fa88b36f43329135d91d3603cf5d
Convert to binary is
H1:  10111011111001011100111000011001001101011010011111101010000100111000011101000101110001011101101110010101001101000001001011010110
H2:  01110001011110011111101010001000101100110110111101000011001100101001000100110101110110010001110100110110000000111100111101011101
How many bits are same:  70

Algorithm:  sha256
H1:  298f0a9d0ef5fd8ae3b6b2e1c99afc7d41d6dfc69831e35c3c9bf5164697efbd
H2:  aee93b5ff623d8eb0d6ef48bbc8ac27623c87c891f48f62601c1298c4404cc7a
Convert to binary is
H1:  0010100110001111000010101001110100001110111101011111110110001010111000111011011010110010111000011100100110011010111111000111110101000001110101101101111111000110100110000011000111100011010111000011110010011011111101010001011001000110100101111110111110111101
H2:  1010111011101001001110110101111111110110001000111101100011101011000011010110111011110100100010111011110010001010110000100111011000100011110010000111110010001001000111110100100011110110001001100000000111000001001010011000110001000100000001001100110001111010
How many bits are same:  131
[/shell]

ball Written by:

Teerapat Khunpech Live, Tech, Beers, Bike, Cafe Racer, Docker, Devops, Eco-System