Jadual Kandungan
1: Pengenalan Masalah
Dua: Penyelesaian
2.1: Penyulitan Pertama
2.2: Penyulitan kedua
3: Pelaksanaan kod
3.1: Penyulitan pertama
3.2: Second encryption
Rumah Java javaTutorial Bagaimana untuk mencapai log masuk selamat dengan penyulitan MD5 berganda Java

Bagaimana untuk mencapai log masuk selamat dengan penyulitan MD5 berganda Java

May 17, 2023 pm 05:31 PM
java md5

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 || '操作失败')
    }
}
Salin selepas log masuk

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("添加失败!");
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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 Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

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)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

TimeStamp to Date in Java TimeStamp to Date in Java Aug 30, 2024 pm 04:28 PM

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Oct 13, 2024 pm 01:32 PM

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.

See all articles