Covert SHA1 dari Binary ke Hexadecimal Digits dan Sebaliknya

SHA-1 produces a 160-bit (20-byte) hash value. A SHA-1 hash value is typically expressed as a hexadecimal number, 40 digits long. (http://en.wikipedia.org/wiki/SHA-1)

SHA1 akan menghasilkan 20 bytes binary data (termasuk NULL) yang dapat kita gunakan untuk banyak hal termasuk untuk pengecekan integritas file. Untuk ‘non-binary environment’ seperti email, atau web kita bisa meng-‘convert’ 20 byte binary data tersebut ke dalam bentuk Hexadecimal Digits. Hexadecimal Digits ini berukuran dua kali lipat, yaitu 40 byte data.

Python telah menyediakan sebuah library bernama ‘binascii‘ yang dapat kita gunakan untuk meng-‘convert’ binary data tersebut ke dalam bentuk hexadecimal digits ataupun sebaliknya. Berikut adalah contoh penggunaan library ‘binascii’

import binascii, hashlib

sha1 = hashlib.sha1()
sha1.update('hello world')
sha1bin = sha1.digest()
sha1hex = sha1.hexdigest()

sha1hexconvert = binascii.hexlify(sha1bin)
sha1binconvert = binascii.unhexlify(sha1hex)

# menampilkan hasil covert beserta ukurannya
print (sha1bin, len(sha1bin), 'sha1bin')
print (sha1binconvert, len(sha1binconvert), 'sha1binconvert')
print (sha1hex, len(sha1hex), 'sha1hex')
print (sha1hexconvert, len(sha1hexconvert), 'sha1hexconvert')

Dari segi panjang data, SHA1 dalam bentuk binary lebih hemat karena hanya membutuhkan 20 byte dibandingkan bentuk hexadecimalnya yang memerlukan 40 byte data. Penghematan 20 byte ini kan sangat berarti bila kita masuk dalam dunia network programming dimana penghematan pengiriman data sangat diperlukan.

Semoga bermanfaat.

Referensi:

Mencari SHA1 dari File Berukuran Besar Menggunakan Python

In cryptography, SHA-1 is a cryptographic hash function designed by the United States National Security Agency and published by the United States NIST as a U.S. Federal Information Processing Standard.

SHA-1 produces a 160-bit (20-byte) hash value. A SHA-1 hash value is typically expressed as a hexadecimal number, 40 digits long. (http://en.wikipedia.org/wiki/SHA-1)

Seperti yang (semoga saja) sudah kita ketahui, salah satu fungsi dari SHA1 adalah untuk mengecek integritas dari sebuah file. SHA1 akan menghasilkan 20 byte data yang sifatnya unik. Bila sebuah data dalam sebuah file berubah 1 byte saja, maka nilai SHA1 dari file tersebut akan berubah total.

Kali ini saya akan berbagi info tentang bagaimana menghitung nilai SHA1 dari sebuah file yang berukuran besar (misalnya lebih dari 1 GB) tanpa mengkonsumsi banyak memory (RAM).  Soruce code berikut adalah fungsi menggunakan bahasa python versi 2 untuk menghitung SHA1.

import hashlib
def sha1sum(filePath):
    sha1 = hashlib.sha1()
    fOri = open(filePath, 'rb')
    line = fOri.read(8388608) #read every 8MB
    while line:
        sha1.update(line)
        line = fOri.read(8388608) #read every 8MB
    fOri.close()
    return sha1.digest()

Fungsi tersebut akan membaca file tiap 8 MB. Walau file yang dihitung berukuran besar (misal 1 GB), fungsi tersebut hanya memerlukan memory  kurang lebih sebesar 8 MB.

Mudah bukan? Semoga info ini bermanfaat.

Referensi: