SHA1 vs md5 vs SHA256: yang akan digunakan untuk login PHP?

133

Saya sedang membuat login php, dan saya mencoba memutuskan apakah akan menggunakan SHA1 atau Md5, atau SHA256 yang saya baca di artikel stackoverflow lain. Apakah ada di antara mereka yang lebih aman daripada yang lain? Untuk SHA1 / 256, apakah saya masih menggunakan garam?

Juga, apakah ini cara aman untuk menyimpan kata sandi sebagai hash di mysql?

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);
Tony Stark
sumber
Lihat juga jawaban ini dan baca bagian tentang hashing kata sandi.
Ja͢ck

Jawaban:

110

Tidak juga. Anda harus menggunakan bcrypt. Hash yang Anda sebutkan semuanya dioptimalkan agar cepat dan mudah pada perangkat keras, sehingga meretasnya memiliki kualitas yang sama. Jika Anda tidak punya pilihan lain, setidaknya pastikan untuk menggunakan garam panjang dan hash berulang kali.

Menggunakan bcrypt di PHP 5.5+

PHP 5.5 menawarkan fungsi-fungsi baru untuk hashing kata sandi . Ini adalah pendekatan yang disarankan untuk penyimpanan kata sandi dalam aplikasi web modern.

// Creating a hash
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// If you omit the ['cost' => 12] part, it will default to 10

// Verifying the password against the stored hash  
if (password_verify($password, $hash)) {
    // Success! Log the user in here.
}

Jika Anda menggunakan versi PHP yang lebih lama, Anda benar-benar harus meningkatkan , tetapi sampai Anda melakukannya, Anda dapat menggunakan kata sandi_compat untuk mengekspos API ini.

Juga, tolong biarkan password_hash()menghasilkan garam untuk Anda. Ini menggunakan CSPRNG .

Dua peringatan bcrypt

  1. Bcrypt akan secara diam-diam memotong kata sandi yang lebih panjang dari 72 karakter.
  2. Bcrypt akan memotong setelah NULkarakter apa pun .

( Bukti Konsep untuk kedua peringatan di sini.)

Anda mungkin tergoda untuk menyelesaikan peringatan pertama dengan pra-hashing kata sandi Anda sebelum menjalankannya melalui bcrypt , tetapi hal itu dapat menyebabkan aplikasi Anda menjalankan headfirst ke yang kedua.

Alih-alih menulis skema Anda sendiri, gunakan perpustakaan yang ada yang ditulis dan / atau dievaluasi oleh pakar keamanan.

TL; DR - Gunakan bcrypt .

Johannes Gorset
sumber
1
juga, saya sangat baru dalam hal ini: apakah sha1, sha256, dan md5 semua 'hash' yang Anda maksud?
Tony Stark
3
Iya. Saya mengacu pada SHA1, SHA256 dan MD5 dan serangkaian hash lainnya yang dioptimalkan untuk kecepatan. Anda tidak ingin menggunakan hash yang dioptimalkan untuk kecepatan untuk mengamankan kata sandi. Ada banyak artikel bagus yang membahas mengapa, dan saya suka artikel ini secara khusus: chargen.matasano.com/chargen/2007/9/7/…
Johannes Gorset
4
Ini termasuk dalam fungsi "crypt" sejak PHP 5.3. Jika Anda memiliki versi sebelumnya, saya akan mencari kerangka kerja "phpass" untuk hal terbaik berikutnya.
Johannes Gorset
3
@Stanislav Palatnik SHA512 adalah alternatif yang baik. Jangan salah sangka; Saya tidak mengatakan bahwa hash SHA512 yang diregangkan dan asin tidak aman. Itu aman. Meski begitu, kenyataannya tetap bahwa bcrypt lebih aman, dan jadi saya tidak melihat alasan untuk tidak menggunakannya.
Johannes Gorset
10
@ Chypher: bcryptdirancang untuk lambat demi lambat untuk di-crack.
Johannes Gorset
23

Saya pikir menggunakan md5 atau sha256 atau hash yang dioptimalkan untuk kecepatan baik-baik saja dan saya sangat ingin mendengar bantahan yang mungkin dimiliki pengguna lain. Inilah alasan saya

  1. Jika Anda mengizinkan pengguna untuk menggunakan kata sandi yang lemah seperti Tuhan, cinta, perang, kedamaian maka tidak masalah enkripsi Anda masih akan memungkinkan pengguna untuk mengetikkan kata sandi bukan hash dan kata sandi ini sering digunakan terlebih dahulu, jadi ini TIDAK akan terjadi ada hubungannya dengan enkripsi.

  2. Jika Anda tidak menggunakan SSL atau tidak memiliki sertifikat maka penyerang yang mendengarkan lalu lintas akan dapat menarik kata sandi dan segala upaya mengenkripsi dengan javascript atau sejenisnya adalah sisi klien dan mudah retak dan diatasi. Sekali lagi ini TIDAK akan ada hubungannya dengan enkripsi data di sisi server.

  3. Serangan brute force akan mengambil keuntungan dari kata sandi yang lemah dan sekali lagi karena Anda mengizinkan pengguna untuk memasukkan data jika Anda tidak memiliki batasan login 3 atau bahkan lebih dari itu masalahnya lagi TIDAK akan ada hubungannya dengan enkripsi data.

  4. Jika database Anda dikompromikan maka kemungkinan besar semuanya telah dikompromikan termasuk teknik hashing Anda tidak peduli seberapa samar Anda telah membuatnya. Sekali lagi ini bisa berupa serangan XSS karyawan yang tidak puas atau injeksi sql atau serangan lain yang tidak ada hubungannya dengan enkripsi kata sandi Anda.

Saya percaya Anda harus tetap mengenkripsi, tetapi satu-satunya hal yang dapat saya lihat enkripsi lakukan adalah mencegah orang yang sudah atau entah bagaimana memperoleh akses ke database dari hanya membacakan kata sandi dengan keras. Jika itu adalah seseorang yang tidak sah pada database maka Anda memiliki masalah yang lebih besar untuk dikhawatirkan karena itulah Sony mengambilnya karena mereka pikir kata sandi yang dienkripsi melindungi semuanya termasuk nomor kartu kredit yang dilakukannya hanyalah melindungi satu bidang itu saja.

Satu-satunya manfaat murni yang dapat saya lihat untuk enkripsi kata sandi yang kompleks dalam sebuah database adalah untuk menunda karyawan atau orang lain yang memiliki akses ke database hanya dengan membacakan kata sandi. Jadi jika itu adalah proyek kecil atau sesuatu yang saya tidak akan terlalu khawatir tentang keamanan di sisi server, bukannya saya akan lebih khawatir tentang mengamankan apa pun yang mungkin dikirim oleh klien ke server seperti injeksi sql, serangan XSS atau kebanyakan cara lain yang Anda gunakan. dapat dikompromikan. Jika seseorang tidak setuju saya berharap untuk membaca cara bahwa kata sandi super terenkripsi adalah suatu keharusan dari sisi klien.

Alasan saya ingin mencoba dan memperjelas ini adalah karena terlalu sering orang mempercayai kata sandi terenkripsi berarti mereka tidak perlu khawatir akan dikompromikan dan mereka berhenti khawatir tentang pengamanan situs web.

Roger Johnson
sumber
1
Dinyatakan dengan baik. Keamanan Cyber ​​akan lebih disukai daripada teknik hashing, mereka tidak hanya menyimpan data Anda tetapi juga menjaga pertahanan Server.
CᴴᴀZ
14
Ini benar-benar salah informasi. Tentu saja hashing password dengan aman dalam database tidak meningkatkan keamanan pada level aplikasi atau level database. Ini bukan tangkapan untuk keamanan. Anda ingin mem-hash kata sandi pengguna dengan aman di database Anda karena 2 alasan; pertama pelanggan mempercayai Anda dengan kata sandi mereka, yang mungkin atau mungkin tidak mereka gunakan di situs lain, jadi Anda ingin memastikan ini tidak dapat dipulihkan, bahkan jika Anda db dikompromikan, kedua, Anda ingin menghapus pertanggungjawaban dalam hal keamanan pelanggaran. Saya tidak tahu adanya tuntutan hukum, tapi kebocoran kata sandi membuat perusahaan Anda terlihat sangat buruk.
James McMahon
6
Ini saran yang buruk. Jika seseorang mencuri basis data Anda dan mendapatkan semua kata sandi hash Anda, bahkan jika mereka juga telah mengganggu bagian lain dari basis data Anda, tetap penting untuk mencegah mereka memecahkan kata sandi dan masuk. (Pikirkan situs web perbankan, misalnya.) Algoritma yang dioptimalkan dengan kecepatan memungkinkan penyerang untuk menguji banyak kandidat terhadap hash yang dicuri sampai mereka menemukan kecocokan. Algoritma seperti bcrypt dan scrypt membuat lambat dan mahal untuk menguji kandidat terhadap hash, bahkan jika mereka tahu algoritma apa yang Anda gunakan. Jadi mereka memberikan perlindungan yang lebih baik jika seseorang mencuri hash.
Richard
6
"Jika database Anda dikompromikan maka kemungkinan besar semuanya telah dikompromikan termasuk teknik hashing Anda tidak peduli seberapa samar Anda telah membuatnya." Itu sebabnya bcrypt sangat penting. Dengan bcrypt, tidak masalah jika seseorang memiliki hash. Dengan algoritma hashing cepat seperti SHA1 / MD5, itu bisa.
ceejayoz
Saya pikir intinya beberapa dari Anda yang hilang adalah bahwa tidak masalah jika kata sandi 1000% aman ketika semua data lainnya adalah teks-jelas. Misalnya, jika seluruh database dikompromikan, maka peretas sekarang memiliki semua nomor kartu kredit teks-jelas. Ya, banyak orang menggunakan kata sandi yang sama di berbagai situs web, tetapi mereka sudah diberi tahu ad mual untuk tidak melakukannya, jadi itu bukan lagi masalah kita. Jika database itu sendiri berisi info sensitif, dan komprominya menjadi perhatian, maka enkripsi seluruh database, sekuat yang Anda pikir perlu.
UncaAlby
15

Seperti yang ditunjukkan oleh Johannes Gorset, posting oleh Thomas Ptacek dari Matasano Security menjelaskan mengapa fungsi hashing sederhana dan bertujuan umum seperti MD5, SHA1, SHA256 dan SHA512 adalah pilihan hashing password yang buruk .

Mengapa? Mereka terlalu cepat - Anda dapat menghitung setidaknya 1.000.000 MD5 hash per detik per inti dengan komputer modern, sehingga brute force layak terhadap sebagian besar kata sandi yang digunakan orang. Dan itu jauh lebih sedikit daripada cluster server cracking berbasis GPU!

Pengasinan tanpa peregangan kunci hanya berarti Anda tidak dapat melakukan precompute pada tabel pelangi, Anda harus membuatnya ad hoc untuk garam spesifik tersebut. Tetapi itu tidak akan benar-benar membuat segalanya menjadi lebih sulit.

User @Will akan mengatakan:

Semua orang membicarakan ini seperti mereka dapat diretas melalui internet. Seperti yang telah dinyatakan, upaya membatasi tidak memungkinkan untuk memecahkan kata sandi melalui Internet dan tidak ada hubungannya dengan hash.

Mereka tidak perlu melakukannya. Rupanya, dalam kasus LinkedIn mereka menggunakan common kerentanan injeksi SQL untuk mendapatkan tabel DB login dan memecahkan jutaan kata sandi secara offline.

Kemudian dia kembali ke skenario serangan offline:

Keamanan benar-benar berperan ketika seluruh basis data dikompromikan dan seorang peretas kemudian dapat melakukan 100 juta upaya kata sandi per detik terhadap hash md5. SHA512 sekitar 10.000 kali lebih lambat.

Tidak, SHA512 tidak 10.000 kali lebih lambat dari MD5 - hanya dibutuhkan sekitar dua kali lipat. Crypt / SHA512 , di sisi lain, adalah binatang yang sangat berbeda yang, seperti rekan BCrypt, melakukan peregangan kunci , menghasilkan hash yang sangat berbeda dengan built-in garam acak dan akan memakan waktu antara 500 dan 999999 kali lebih banyak untuk dihitung (Peregangan merdu).

SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

Jadi pilihan untuk PHP adalah Crypt / Blowfish (BCrypt), Crypt / SHA256 atau Crypt / SHA512. Atau setidaknya Crypt / MD5 (PHK). Lihat www.php.net/manual/en/function.crypt.php

LexLythius
sumber
Kata sandi sederhana tidak apa-apa, terserah firewall untuk menjaga server tetap aman .. dan maksudnya "firewall" adalah firewall reaktif yang memblokir / memperlambat brute-force (manusia hanya bisa mengetik cepat BAHWA) .. ini kontes tidak ada gunanya ... "bagaimana jika beberapa peretas masuk dan sekarang memiliki segalanya" (wajah-meja) - jika seorang peretas masuk ke server Anda - itu sudah berakhir. Kata sandi dipecahkan sebagian besar karena terlalu sederhana, atau pengembang perangkat lunak terlalu malas untuk berpikir seperti penjahat cyber.
@argon Silakan baca lagi. Seluruh tujuan hashing password adalah agar ketika login DB Anda terganggu (dan pada suatu titik) Anda tidak akan langsung membocorkan semua kata sandi pengguna Anda, yang paling sering digunakan kembali oleh pengguna di berbagai situs yang berbeda — jika tidak, sederhana penundaan setelah input akan dilakukan. Dan "permainan berakhir jika mereka masuk ke server Anda" adalah titik yang bisa diperdebatkan, karena mereka tidak perlu masuk ke dalam server Anda. Kerentanan yang paling umum digunakan oleh peretas adalah injeksi SQL (lihat kasus Linkedin), lalu mereka menekan hash. Itu sebabnya Anda perlu pengasinan dan peregangan.
LexLythius
jika persyaratan keamanan sangat ketat, maka menyimpan kata sandi di tempat lain mungkin merupakan ide yang baik. Ada banyak cara untuk melindungi data Anda (dan kode sumber) -untuk "jika / ketika" ... .. -tapi hashing kata sandi hingga "trilyun bit" hanya seaman: pencipta kata sandi / sistem tamu , transmisi data, dan manusia yang melayani perangkat keras server. .. yang dikatakan: Saya TIDAK mengatakan hashing tidak berguna, namun saya mengatakan bahwa jika solusi Anda hanya hash yang lebih rumit maka saya khawatir itu tidak akan bekerja dalam waktu dekat, mengenai komputer kuantum.
Hashing rekursif menambah kerja / biaya untuk setiap upaya peretasan. Semakin banyak iterasi, semakin sulit untuk retak, sehingga hash cepat seperti SHA256 dapat digunakan. Iterasi harus acak dan dapat dipublikasikan. password_hash()menunjukkan biaya dalam hash itu sendiri.
Victor Stoddard
@VictorStoddard Ya, Anda dapat menggulung skema hashing Anda sendiri dan memberikan peregangan kunci yang bisa ditala. Tetapi mengapa Anda ingin melakukan itu daripada menggunakan algoritma yang sudah ada, jauh lebih cermat diteliti yang telah dibuat dan dibuat para ahli untuk tujuan ini?
LexLythius
13

Gunakan SHA256. Ini tidak sempurna, seperti yang SHA512ideal untuk hash cepat, tetapi di luar opsi, itu pilihan yang pasti. Sesuai teknologi hashing apa pun, pastikan untuk memberi garam hash untuk keamanan tambahan.

Sebagai catatan tambahan, FRKT, tolong tunjukkan di mana seseorang dapat dengan mudah memecahkan hash SHA256 asin? Saya benar-benar sangat tertarik melihat ini.

Edit Penting:

Bergerak maju, silakan gunakan bcryptsebagai hash yang dikeraskan. Informasi lebih lanjut dapat ditemukan di sini .


Edit pada Penggaraman:

Gunakan angka acak, atau aliran byte acak, dll. Anda dapat menggunakan bidang unik catatan di basis data Anda sebagai garam juga, dengan cara ini garam berbeda untuk setiap pengguna.

Kyle Rosendo
sumber
1
Tapi mereka dioptimalkan untuk kecepatan, yang berarti mereka memungkinkan peretasan brutal.
arbales
6
Faktanya tetap, ini untuk mengamankan kata sandi. Dengan menggunakan hash dengan garam, lalu menambahkan batas upaya 3 di situs web, Anda secara substansial memperlambat upaya peretas (bahkan penjahat kasar). Menggunakan enkripsi murni apa pun, kini Anda memiliki masalah lain - mengamankan kunci. Jika kunci ditemukan, seluruh basis data Anda terganggu (jika tidak ada garam yang ditambahkan). Hash Namun, Anda tidak akan pernah mendapatkan kata sandi asli dari sistem, dan begitulah seharusnya.
Kyle Rosendo
1
Seperti dicatat, masalah dengan seri MD dan SHA adalah bahwa mereka dioptimalkan untuk kecepatan. Tidak dapat dipungkiri bahwa hash seperti ini menjadi semakin tidak aman ketika komputasi berkembang.
Johannes Gorset
1
Apa pun menjadi semakin buruk / tidak aman / dll saat komputasi berkembang. Pada saat SHA512 dll diretas, akan ada algoritma yang lebih aman tersedia. Bagaimanapun, ini adalah sifat komputasi.
Kyle Rosendo
1
apa cara yang baik untuk membuat garam di php? punya kode contoh? Saya membayangkan saya tidak seharusnya hanya memilih sesuatu seperti 'jerapah'
Tony Stark
4

Apa yang tampaknya hilang adalah bahwa jika peretas memiliki akses ke basis data, ia mungkin juga memiliki akses ke file php yang hash kata sandinya dan kemungkinan besar hanya bisa memodifikasi itu untuk mengirimnya semua kombo kata sandi nama pengguna yang berhasil. Jika dia tidak memiliki akses ke direktori web, dia selalu bisa memilih kata sandi hash, dan menuliskannya ke dalam basis data. Dengan kata lain algoritma hash tidak terlalu penting seperti keamanan sistem, dan membatasi upaya login juga jika Anda tidak menggunakan SSL maka penyerang hanya dapat mendengarkan pada koneksi untuk mendapatkan informasi. Kecuali Anda membutuhkan algoritma untuk mengambil waktu lama untuk menghitung (untuk keperluan Anda sendiri) maka SHA-256 atau SHA-512 dengan garam khusus pengguna harus cukup.

Sebagai langkah keamanan tambahan, buat skrip (bash, batch, python, dll) atau program dan berikan nama yang tidak jelas dan periksalah dan lihat apakah login.php telah berubah (periksa tanggal / cap waktu) dan kirimi Anda email jika sudah. Mungkin juga harus mencatat semua upaya saat masuk dengan hak admin dan mencatat semua upaya yang gagal untuk masuk ke database dan membuat log diemail kepada Anda.

Dennis Bellinger
sumber
"Apa yang tampaknya orang hilang adalah bahwa jika peretas memiliki akses ke database dia mungkin juga memiliki akses ke file php yang hash password ..." Ini tidak benar. Salah satu kerentanan yang paling umum adalah injeksi SQL, yang akan memberikan kemampuan baca / tulis ke database tetapi tidak memiliki akses ke kode PHP.
ceejayoz
Jika Anda memiliki akses ke kode, maka Anda dapat memodifikasi dan menyimpan semua kata sandi yang dikirim pengguna dalam teks biasa. Jadi tidak, jika kode ini dikompromikan maka GAME OVER.
magallanes
3

Semua orang membicarakan ini seperti mereka dapat diretas melalui internet. Seperti yang telah dinyatakan, upaya membatasi tidak memungkinkan untuk memecahkan kata sandi melalui Internet dan tidak ada hubungannya dengan hash.

Garam adalah suatu keharusan, tetapi kompleksitas atau banyak garam bahkan tidak masalah. Garam apa saja menghentikan penyerang dari menggunakan meja pelangi premade. Garam unik per pengguna menghentikan penyerang dari membuat tabel pelangi baru untuk digunakan terhadap seluruh basis pengguna Anda.

Keamanan benar-benar berperan ketika seluruh basis data dikompromikan dan seorang peretas kemudian dapat melakukan 100 juta upaya kata sandi per detik terhadap hash md5. SHA512 sekitar 10.000 kali lebih lambat. Kata sandi yang kompleks dengan kekuatan saat ini masih bisa memakan waktu 100 tahun untuk bruteforce dengan md5 dan akan memakan waktu 10.000 kali lebih lama dengan SHA512. Garam tidak menghentikan bruteforce sama sekali karena mereka selalu harus diketahui, yang jika penyerang mengunduh database Anda, ia mungkin ada di sistem Anda.

Akan
sumber
1

MD5 buruk karena masalah tabrakan - dua kata sandi yang berbeda mungkin menghasilkan md-5 yang sama.

Sha-1 akan jauh lebih aman untuk ini. Alasan Anda menyimpan versi kata sandi sha-1 asin ini adalah agar Anda yang swerver tidak menyimpan kata sandi pengguna pada file, yang mungkin mereka gunakan dengan server orang lain. Kalau tidak, apa bedanya?

Jika peretas mencuri seluruh basis data Anda yang tidak dienkripsi, satu-satunya hal yang dilakukan oleh kata sandi asin hash adalah mencegahnya menyamar sebagai pengguna untuk masa depan - peretas sudah memiliki data.

Apa gunanya penyerang memiliki nilai hash, jika apa yang dimasukkan pengguna adalah kata sandi biasa?

Dan bahkan jika peretas dengan teknologi masa depan dapat menghasilkan sejuta sha-1 kunci per detik untuk serangan brute force, akankah server Anda menangani sejuta log masuk per detik bagi peretas untuk menguji kuncinya? Itu jika Anda membiarkan peretas mencoba masuk dengan sha-1 asin alih-alih kata sandi seperti masuk biasa.

Taruhan terbaik adalah untuk membatasi upaya masuk yang buruk ke beberapa nomor yang masuk akal - 25 misalnya, dan kemudian waktu pengguna keluar selama satu atau dua menit. Dan jika upaya bady logon kumulatif mencapai 250 dalam 24 jam, tutup akses akun dan kirim email ke pemiliknya.

Brad Jensen
sumber
Bahkan jika saya menggunakan enkripsi yang lebih lemah, praktis tidak ada sistem yang dapat menahan serangan kasar selama lebih dari 1 juta percobaan per detik.
magallanes
1
Tiga login gagal, dan Anda dikunci. Periode, akhir cerita. Bahkan kata sandi super bodoh seperti "1234" aman, jika peretas kebetulan pertama kali mencoba "kata sandi", "pa $$ kata" dan "passw0rd" (mengunci!). Bagaimana pengguna mendapatkan kembali akses sekarang menjadi titik keamanan Anda, dan apa yang Anda lakukan tergantung pada ukuran basis pengguna Anda. 200 pengguna? Suruh mereka menelepon untuk meminta bantuan.
UncaAlby
Apakah jawaban ini tidak masuk akal bagi orang lain, atau hanya saya?
Wildcard
1

Berikut ini adalah perbandingan antara MD5 dan SHA1. Anda bisa mendapatkan ide yang jelas tentang mana yang lebih baik.

masukkan deskripsi gambar di sini

Biswajit Karmakar
sumber
1

Gunakan argon2i . The argon2 fungsi password hashing telah memenangkan Password Hashing Kompetisi.

Pilihan wajar lainnya, jika menggunakan argon2 tidak tersedia, adalah scrypt , bcrypt dan PBKDF2 . Wikipedia memiliki halaman untuk fungsi-fungsi ini:

MD5, SHA1 dan SHA256 adalah intisari pesan, bukan fungsi kata sandi. Mereka tidak cocok untuk tujuan ini.

Beralih dari MD5 ke SHA1 atau SHA512 tidak akan banyak meningkatkan keamanan konstruksi. Menghitung hash SHA256 atau SHA512 sangat cepat. Penyerang dengan perangkat keras biasa masih bisa mencoba puluhan juta (dengan satu CPU) atau bahkan milyaran (dengan GPU tunggal) hash per detik.Fungsi hashing kata sandi yang baik termasuk faktor kerja untuk memperlambat serangan kamus.

Berikut ini adalah saran untuk pemrogram PHP: baca FAQ PHP lalu gunakan password_hash () .

Erwan Legrand
sumber
0

Mari kita asumsikan poin berikutnya: para peretas mencuri basis data kami termasuk para pengguna dan kata sandi (terenkripsi). Dan para peretas membuat akun palsu dengan kata sandi yang mereka tahu.

MD5 lemah karena pendek dan populer dan hampir setiap generasi hash tanpa kata sandi lemah dari serangan kamus. Tapi..

Jadi, katakanlah kita masih menggunakan MD5 dengan SALT. Peretas tidak tahu SALT tetapi mereka tahu kata sandi pengguna tertentu. Sehingga mereka dapat menguji: ????? 12345 di mana 12345 adalah kata sandi yang diketahui dan ????? adalah garam. Peretas cepat atau lambat bisa menebak SALT.

Namun, jika kami menggunakan MD5 + SALT dan kami menerapkan MD5, maka tidak ada cara untuk memulihkan informasi. Namun, saya ulangi, MD5 masih pendek.

Sebagai contoh, katakanlah kata sandi saya adalah: 12345. SALT adalah BILLCLINTON

md5: 827ccb0eea8a706c4c34a16891f84e7b

md5 dengan hash: 56adb0f19ac0fb50194c312d49b15378

mD5 dengan hash di atas md5: 28a03c0bc950decdd9ee362907d1798a Saya mencoba menggunakan layanan online itu dan saya tidak menemukan satu pun yang dapat memecahkannya. Dan itu hanya MD5! (mungkin seperti hari ini akan menjadi crackeable karena saya membuat md5 online)

Jika Anda ingin berlebihan maka SHA256 lebih dari cukup jika diterapkan dengan garam dan dua kali.

tldr MD5 (HASH + MD5 (kata sandi)) = ok tapi pendek, SHA256 lebih dari cukup.

magallanes
sumber
Masalah dengan menggunakan MD5 dengan garam adalah bahwa komputer dapat membuat serangan brute force pada satu kata sandi dengan kecepatan super cepat. shylor.com/2015/09/14/php-5-5-secure-password-hashing
Shylor
0

Enkripsi md5 adalah salah satu yang terburuk, karena Anda harus mengubah kodenya dan sudah mendekripsi. Saya akan merekomendasikan Anda SHA256. Saya pemrograman sedikit lebih lama dan memiliki pengalaman yang baik. Di bawah ini juga akan menjadi enkripsi.

password_hash() example using Argon2i

<?php
echo 'Argon2i hash: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I);
?>
The above example will output something similar to:

Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
Lars Kotor
sumber