cari
RumahJavajavaTutorialBagaimana untuk mencapai log masuk selamat dengan penyulitan MD5 berganda Java

1: Pengenalan Masalah

Nyahsulit kata laluan yang disimpan dalam pangkalan data:

Bagaimana untuk mencapai log masuk selamat dengan penyulitan MD5 berganda Java

Bagaimana untuk mencapai log masuk selamat dengan penyulitan MD5 berganda Java

Anda boleh lihat saya terkejut kerana berjaya menyahsulit kata laluan saya, kerana kita semua tahu bahawa algoritma MD5 tidak boleh diterbalikkan kerana ia adalah fungsi cincang dan menggunakan algoritma cincang Semasa proses pengiraan, sebahagian daripada maklumat asal hilang. Jadi mengapa kata laluan saya boleh dinyahsulit di tapak web?

Selepas beberapa carian, saya mendapati bahawa prinsip penyahsulitan alat penyahsulitan dalam talian adalah sangat mudah Prinsipnya adalah untuk mengumpul kata laluan mudah yang biasa digunakan oleh pengguna untuk membentuk kamus kata laluan, dan kemudian menyulitkan kata laluan dalam kamus. dengan MD5 dan simpannya , semasa apa yang dipanggil "penyahsulitan", teks sifir penyulitan kata laluan pengguna sebenar dibandingkan dengan kata laluan yang disimpan. Jika teks sifir wujud dalam kamus, ia boleh "disulitkan". Oleh itu, hanya menggunakan MD5 untuk menyulitkan kata laluan pengguna adalah tidak selamat Apabila kami menetapkan kata laluan, kami biasanya mempunyai pengesanan kerumitan Contohnya, kata laluan mesti mengandungi nombor bahasa Inggeris dan sebagainya, hanya untuk alasan keselamatan.

Selepas mengetahui prinsip penyahsulitan, kami mencuba kata laluan yang lebih kompleks untuk melihat sama ada ia boleh "dinyahsulitkan" Mula-mula, menyulitkan kata laluan "qweasd666":

Bagaimana untuk mencapai log masuk selamat dengan penyulitan MD5 berganda Java

Selepas penyulitan, kami memilih teks sifir kecil 32-bit untuk penyahsulitan:

Bagaimana untuk mencapai log masuk selamat dengan penyulitan MD5 berganda Java

Kegagalan untuk menyahsulit menunjukkan bahawa prinsipnya adalah untuk mengumpul teks sifir yang biasa digunakan untuk pemadanan dan retak. Memandangkan kata laluan "qweasd666" tidak boleh dipecahkan, ia sepatutnya selamat dan anda semua boleh menggunakan kata laluan ini (doge).

Berbalik kepada subjek, tapak web ini berjaya memecahkan kata laluan saya yang telah ditetapkan dengan teliti, yang membuatkan saya berasa sangat tidak selamat dan saya berasa kehilangan muka saya.

Selain daripada operasi penyahsulitan yang dinyatakan di atas, terdapat satu lagi masalah besar Apabila bahagian hadapan menghantar data, http menggunakan penghantaran teks biasa Jika paket data penghantaran dipintas, maka bahagian belakang anda Tidak kira betapa rumitnya algoritma penyulitan, kata laluan anda akan diketahui oleh orang lain.

Dua: Penyelesaian

2.1: Penyulitan Pertama

Selepas menemui masalah, kami boleh menetapkan ubat yang betul Pertama sekali, saya fikir masalah itu perlu diselesaikan adalah masalah penghantaran http plaintext , kerana ini adalah risiko tertinggi yang boleh ditangkap oleh penangkapan paket biasa. Memandangkan terdapat isu keselamatan dengan penghantaran teks biasa, kami boleh memastikan keselamatan penghantaran melalui penyulitan

Saya masih menggunakan skim penyulitan MD5, tetapi menambah nilai garam tetap sebelum menyulitkan kata laluan. garam? Adakah ia menambah garam? Sebenarnya, ia adalah lebih baik untuk mengatakan ia menambah beberapa "perasa". Idea asasnya ialah: apabila pengguna memberikan kata laluan untuk kali pertama (biasanya semasa mendaftar), program ini menaburkan beberapa "sos" ke dalam kata laluan Untuk mengurangkan tekanan pembangunan, perasa ini adalah sama untuk setiap pengguna hash lagi. Ini akan menghalang kebocoran kata laluan teks yang jelas semasa penghantaran.

2.2: Penyulitan kedua

Perhatikan bahawa apa yang saya nyatakan di atas adalah untuk mengelakkan kebocoran kata laluan teks biasa, tetapi ini tidak bermakna teks sifir tidak akan bocor Jika penggodam memintas kata laluan anda menghantar melalui http Kata laluan yang disulitkan, atau kebocoran pangkalan data menyebabkan kata laluan yang disulitkan dicuri oleh penggodam pertanyaan terbalik melalui jadual pelangi untuk mendapatkan kata laluan asal. Pada masa ini, kepentingan penyulitan sekunder keluar Prinsip penyulitan sekunder adalah untuk menggabungkan kata laluan yang disulitkan dari bahagian hadapan dengan nilai Garam rawak dan kemudian menyulitkannya (perhatikan bahawa kali ini adalah nilai garam). akan Ia dijana secara rawak apabila pengguna log masuk dan disimpan dalam pangkalan data.

Pada masa ini, anda mungkin mempunyai keraguan yang sama seperti saya pada mulanya, iaitu, anda telah menyimpan nilai garam rawak dalam pangkalan data, jadi jika pangkalan data bocor, apakah nilai garam rawak anda akan lakukan? Tidakkah mungkin bagi penggodam untuk mendapatkan kata laluan dengan menyahsulit data yang disulitkan dan mengeluarkan nilai garam? Ya, adalah mungkin bagi penggodam untuk mendapatkan kata laluan melalui cara sedemikian, tetapi hanya jika dia boleh menyahsulitnya Apa yang anda perlu tahu ialah MD5 tidak boleh dipecahkan secara langsung dan hanya boleh dinyahsulit melalui kaedah yang lengkap. Walaupun penggodam memperoleh kata laluan yang disulitkan dalam pangkalan data, tetapi tidak mengetahui proses penyulitan bahagian belakang, dia tidak akan dapat menghuraikannya Walaupun penggodam mengetahui proses penyulitan pada masa yang sama, disebabkan oleh pengasinan sekunder dan penyulitan sekunder, teks sifir pada masa ini sukar untuk dihuraikan Memandangkan kerumitan data yang disulitkan meningkat, kos pemecahan meningkat secara eksponen Dalam menghadapi kos yang begitu besar, saya percaya tiada penggodam yang sanggup cubalah. Sudah tentu, garam tidak perlu ditambah di hadapan atau di hujung Ia juga boleh dimasukkan di tengah, secara berasingan, atau dalam susunan terbalik Ia boleh dilaraskan secara fleksibel semasa reka bentuk program, yang boleh meningkatkan kesukaran secara eksponen retak.

2.3: Pelaksanaan khusus

2.3.1: Pendaftaran pengguna

  • Hujung hadapan melakukan penyulitan md5 pada kata laluan yang dimasukkan oleh pengguna (garam tetap )

  • Hantar kata laluan yang disulitkan ke bahagian belakang

  • Halaman belakang secara rawak menjana garam

  • Gunakan Generate salt untuk menyulitkan kata laluan yang diluluskan dari bahagian hadapan, dan kemudian simpan kata laluan yang disulitkan dan garam bersama-sama dalam db

2.3.2: Log masuk pengguna

  • Halaman hadapan melakukan penyulitan md5 pada kata laluan yang dimasukkan oleh pengguna (garam tetap)

  • Lepaskan kata laluan yang disulitkan ke bahagian belakang

  • Bahagian belakang menggunakan akaun pengguna untuk mendapatkan semula maklumat pengguna

  • Bahagian belakang melakukan penyulitan md5 pada kata laluan yang disulitkan (mengeluarkan garam), dan kemudian membandingkannya dengan kata laluan disimpan dalam pangkalan data

  • Jika sepadan, log masuk berjaya, jika tidak log masuk gagal

3: Pelaksanaan kod

3.1: Penyulitan pertama

3.1 .1: Frontend

const params = {
    ...this.ruleForm,
    sex: this.ruleForm.sex === '女' ? '0' : '1',
    //设置密码加密(加上固定salt值)
    password: md5(this.ruleForm.password + this.salt)
}
addEmployee(params).then(res => {
    if (res.code === 1) {
        this.$message.success('员工添加成功!')
        if (!st) {
            this.goBack()
        } else {
            this.ruleForm = {
                username: '',
                'name': '',
                'phone': '',
                password: '',
                // 'rePassword': '',/
                'sex': '男',
                'idNumber': ''
            }
        }
    } else {
        this.$message.error(res.msg || '操作失败')
    }
}

3.1.2: Backend

/**
* 添加员工
*/
@PostMapping
public R<String> save(@RequestBody Employee employee){
    //生成随机salt值
    String salt = RandomStringUtils.randomAlphanumeric(5);
    //设置随机盐值
    employee.setSalt(salt);
    //设置密码二次加密
    employee.setPassword(DigestUtils.md5DigestAsHex((salt + employee.getPassword()).getBytes()));
 
    boolean save = employeeService.save(employee);
    if(save){
        return R.success("添加成功!");
    }
    return R.error("添加失败!");
}

3.2: Second encryption

3.2.1: Frontend

const params = {
    ...this.loginForm,
    //登录密码加上固定盐值后发送
    password: md5(this.loginForm.password + this.salt),
}
let res = await loginApi(params)
if (String(res.code) === &#39;1&#39;) {
    localStorage.setItem(&#39;userInfo&#39;, JSON.stringify(res.data))
    window.location.href = &#39;/backend/index.html&#39;
} else {
    this.$message.error(res.msg)
    this.loading = false
}

3.2. 2: Bahagian belakang

rreee

Atas ialah kandungan terperinci Bagaimana untuk mencapai log masuk selamat dengan penyulitan MD5 berganda Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:亿速云. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?Mar 17, 2025 pm 05:46 PM

Artikel ini membincangkan menggunakan Maven dan Gradle untuk Pengurusan Projek Java, membina automasi, dan resolusi pergantungan, membandingkan pendekatan dan strategi pengoptimuman mereka.

Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Bagaimanakah saya membuat dan menggunakan perpustakaan Java Custom (fail JAR) dengan pengurusan versi dan pergantungan yang betul?Mar 17, 2025 pm 05:45 PM

Artikel ini membincangkan membuat dan menggunakan perpustakaan Java tersuai (fail balang) dengan pengurusan versi dan pergantungan yang betul, menggunakan alat seperti Maven dan Gradle.

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?Mar 17, 2025 pm 05:43 PM

Artikel ini membincangkan menggunakan JPA untuk pemetaan objek-relasi dengan ciri-ciri canggih seperti caching dan pemuatan malas. Ia meliputi persediaan, pemetaan entiti, dan amalan terbaik untuk mengoptimumkan prestasi sambil menonjolkan potensi perangkap. [159 aksara]

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna