Mereka mungkin muncul dalam konteks yang sama, namun keduanya sangat berbeda

Enkripsi adalah tentang menjaga rahasia dan kemampuan memulihkannya. Hashing adalah tentang sidik jari — Anda tidak perlu mengembalikan yang asli, namun Anda perlu memastikan keasliannya. Encoding adalah tentang representasi data untuk memungkinkan pertukaran informasi. Pengkodean tidak melibatkan penyimpanan rahasia.

Ini adalah penjelasan panjang Twitter saya. Mari selami detailnya!

Pengkodean

Pengkodean adalah tentang representasi data. Misalnya, untuk ikon di web, kami memilih untuk tidak menyimpan file gambar tetapi menyimpannya langsung di halaman web. Hal ini mencegah klien membuat banyak permintaan HTTP untuk sedikit data.

Namun kemudian data biner dari gambar tersebut harus diubah menjadi data teks. Cara umum untuk melakukannya adalah "pengkodean base64".

Seperti yang Anda lihat, “penerjemahan” itu sepele: Kami membuat blok 6-bit dari data biner dan mencari karakter pada tabel di atas. Disebut base64 karena ada 2⁶ = 64 digit. Oleh karena itu, ini dapat diartikan sebagai konversi basis angka.

Harap dicatat bahwa ini tidak menjaga kerahasiaan konten. Base64 tidak menggunakan kunci rahasia. Karenanya ini bukan enkripsi.

Pengkodean karakter juga sangat umum. Mereka memetakan bilangan bulat ke karakter. Tiga yang paling sering saya temukan adalah UTF8, ASCII, Latin1.

Enkripsi

Enkripsi adalah tentang menjaga rahasia. Anda tidak ingin merahasiakan metode enkripsi dan dekripsi Anda. Sebaliknya, Anda harus memiliki kunci rahasia yang diperlukan untuk mendekripsi. Hal ini disebut prinsip Kerckhoffs.

Secara matematis, Anda memiliki dua fungsi:

encrypt(plain text, key) -> cipher text
decrypt(cipher text, key) -> plain text

Ini disebut algoritma kunci simetris karena Anda menggunakan kunci yang sama untuk mengenkripsi dan mendekripsi. Ada juga algoritma kunci asimetris, tapi ini akan berlebihan.

Skema awal untuk mengenkripsi adalah dengan menggunakan kalimat alami sebagai kunci untuk mengenkripsi karakter tunggal. Jika kalimat kebetulan memiliki satu karakter beberapa kali, karakter kedua dan berikutnya akan dihapus:

Sentence   : The quick brown fox jumps
Derived key: the quickbrownfxjmpsadglvyz

Kemudian Anda menerjemahkan karakter demi karakter:

Original     : the quickbrownfxjmpsadglvyz
Translates to: abcdefghijklmnopqrstuvwxyz 

Perhatikan bahwa “spasi” diterjemahkan menjadi “d” dan “z” diterjemahkan menjadi “spasi”.

Jika digabungkan, pesan secret diterjemahkan menjadi tchkca .

Di Python, tampilannya seperti ini:

Algoritme enkripsi modern sedikit lebih rumit. Yang paling mutakhir adalah AES — Standar Enkripsi Tingkat Lanjut. Sebutan penting adalah Twofish, Serpent, SM4, dan SEED.

hashing

Hashing adalah tentang sidik jari. Anda ingin dapat mengidentifikasi daftar byte secara unik (misalnya string atau file), tetapi Anda tidak ingin menyimpannya. Anda juga tidak perlu kembali ke aslinya atau Anda bahkan tidak menginginkannya. Sama seperti sidik jari: Anda dapat mengambil dua sidik jari dan menyimpulkan bahwa keduanya milik orang yang sama. Namun dengan hanya satu sidik jari, Anda tidak dapat merekonstruksi orang tersebut.

Saya menulis artikel yang menjelaskan secara rinci mengapa hilangnya informasi ini diinginkan:



Namun ada beberapa penerapan fungsi hash lainnya juga:



Fungsi hash yang canggih adalah SHA-256 atau SHA-512.