Dasar -Dasar: Penggunaan Kelas Messagedigest
Faktanya, untuk menyelesaikan enkripsi MD5 di Java, sebagian besar kelas MessageDigest akan membantu Anda mengimplementasikannya, dan beberapa baris kode sudah cukup:
/** * mengenkripsi string md5 * * @param str * @return */impor java.security.messagedigest; string statis publik getMd5 (string str) {try {// menghasilkan perhitungan enkripsi md5 pencernaan pesan md = messageest.getinstance ("md5"); // Hitung fungsi MD5 MD.update (str.getbytes ()); // Digest () Akhirnya menentukan bahwa nilai hash MD5 kembali, dan nilai pengembalian adalah 8 sebagai string. Karena nilai hash MD5 adalah nilai hex 16-bit, itu sebenarnya adalah karakter 8-bit // fungsi biginteger mengubah string 8-bit menjadi nilai hex 16-bit, dan mewakili itu sebagai string; Mendapat nilai hash dalam bentuk string return baru biginteger (1, md.digest ()). tostring (16); } catch (Exception e) {lempar speedException baru ("Terjadi kesalahan enkripsi MD5"); }} Lanjutan: enkripsi dan dekripsi
Java mengimplementasikan kelas enkripsi dan dekripsi MD5, dengan kelas tes, lihat kode untuk detailnya.
Kelas Enkripsi dan Dekripsi MD5 - MyMD5util, kodenya adalah sebagai berikut
Paket com.zyg.security.md5; impor java.io.unsupportedencodingException; impor java.security.messagedigest; impor java.security.nosuchalgorithMexception; impor java.security.securerandom; impor java.util.rarrays; Hex_nums_str = "0123456789abcdef"; Private Static Final Integer Salt_length = 12; / ** * Konversi string hex menjadi array byte * @param hex * @return * / public static byte [] hexStringTobyte (string hex) {int len = (hex.length () / 2); byte [] hasil = byte baru [len]; char [] hexchars = hex.tochararray (); untuk (int i = 0; i <len; i ++) {int pos = i * 2; Hasil [i] = (byte) (hex_nums_str.indexof (hexchars [pos]) << 4 | hex_nums_str.indexof (hexchars [pos + 1]))); } hasil pengembalian; } / ** * Konversi array byte yang ditentukan menjadi string hex * @param b * @return * / public static string bytetoHexString (byte [] b) {stringBuffer hexString = new stringBuffer (); untuk (int i = 0; i <b.length; i ++) {string hex = integer.toHexString (b [i] & 0xff); if (hex.length () == 1) {hex = '0' + hex; } hexString.append (hex.touppercase ()); } return hexString.toString (); } /** * Verify whether the password is legal* @param password * @param passwordInDb * @return * @throws NoSuchAlgorithmException * @throws UnsupportedEncodingException */ public static boolean validPassword(String password, String passwordInDb) throws NoSuchAlgorithmException, UnsupportedEncodingException { //Convert the hex string format password into byte array byte [] pwdindb = hexStringtobyte (kata sandi); // nyatakan byte variabel garam [] garam = byte baru [Salt_length]; // Ekstrak garam dari array byte yang disimpan dalam sistem basis data.arraycopy (pwdindb, 0, garam, 0, garam_length); // Buat pesan pencernaan Objek MessageDigest MD = MessageSpetest.getInstance ("md5"); // jeda data garam ke dalam objek pencernaan pesan md.update (garam); // Lewati data kata sandi ke objek pencernaan pesan md.update (kata sandi.getbytes ("UTF-8"))); // menghasilkan pencernaan pesan dari byte kata sandi input [] digest = md.digest (); // Deklarasikan variabel yang menyimpan pencernaan pesan kata sandi dalam byte basis data [] digestIndB = byte baru [pwdindb.length - Salt_length]; // Dapatkan Pencernaan Pesan Kata Sandi di Sistem Database.ArrayCopy (PWDindB, Salt_length, DigestindB, 0, DigestIndB.length); // Bandingkan apakah pencernaan pesan yang dihasilkan berdasarkan kata sandi input sama dengan pencernaan pesan dalam database jika (arrays.equals (digest, digestIndB)) {// kata sandi dengan benar mengembalikan pesan yang cocok dengan kata sandi, kembalikan true; } else {// kata sandi salah mengembalikan pesan ketidakcocokan kata sandi mengembalikan false; }} /** * Dapatkan kata sandi hexadecimal yang dienkripsi * @param kata sandi * @return * @throws nosuchalgorithmException * @throws UnsupportedencodingException * /Public Static GetEncryPedpwd (String Password) Menyelesaikan NosuchalGorithMException, Uncupported -comportporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporporport, Unsupport encryporporeD /exporport encyport, nosuchalgoryporyport, unsupport encryporporyport, Unsupportedportedported byte [] pwd = null; // generator nomor acak securerandom acak = new SecureRandom (); // nyatakan byte variabel array garam [] garam = byte baru [Salt_length]; // Masukkan nomor acak ke dalam variabel garam acak.nextbytes (garam); // menyatakan pesan pencernaan objek pesan md = null; // Buat pesan pencernaan md = messageDigest.getInstance ("md5"); // jeda data garam ke dalam objek pencernaan pesan md.update (garam); // Lewati data kata sandi ke objek pencernaan pesan md.update (kata sandi.getbytes ("UTF-8"))); // Dapatkan array byte dari pesan pencernaan byte [] digest = md.digest (); // Karena garam harus disimpan dalam array byte dari kata sandi, tambahkan panjang byte dari garam pwd = byte baru [digest.length + garam_length]; // Salin byte garam ke 12 byte pertama dari array byte kata sandi terenkripsi yang dihasilkan, sehingga dapat mengeluarkan garam saat memverifikasi sistem kata sandi. // Salin pesan pencernaan ke byte dalam array byte kata sandi terenkripsi mulai dari sistem byte ke -13.arraycopy (digest, 0, pwd, garam_length, digest.length); // Konversi kata sandi format array byte yang dienkripsi menjadi hexadecimal string format return bytetoHexString (pwd); }}Kelas Tes - Klien, kodenya adalah sebagai berikut:
Paket com.zyg.security.md5; import java.io.unsupportedencodingException; impor java.security.nosuchalgorithmException; import java.util.hashmap; import java.util.map; klien kelas publik {private static peta pengguna hashmap () baru (); public static void main (string [] args) {string username = "zyg"; String password = "123"; RegisterUser (nama pengguna, kata sandi); nama pengguna = "changong"; kata sandi = "456"; RegisterUser (nama pengguna, kata sandi); String LoginUserId = "zyg"; String pwd = "1232"; coba {if (loginValid (loginuserid, pwd)) {system.out.println ("Selamat datang ke login !!!"); } else {System.out.println ("Kesalahan kata sandi, mohon masukkan kembali !!!"); }} catch (nosuchalgorithMexception e) {// todo auto-generated catch block e.printstacktrace (); } catch (UnsupportedEncodingException e) {// TODO Auto-Enchenerated Catch Block E.PrintStackTrace (); }} / ** * Pengguna terdaftar * * @param nama pengguna * @param Kata sandi * / public static void registerUser (string username, string password) {string encryptedpwd = null; coba {encryptedpwd = mymd5util.getencryptedpwd (kata sandi); Users.put (nama pengguna, encryptedpwd); } catch (nosuchalgorithMexception e) {// todo auto-generated catch block e.printstacktrace (); } catch (UnsupportedEncodingException e) {// TODO Auto-Enchenerated Catch Block E.PrintStackTrace (); } } /** * Verification login* * @param userName * @param password * @return * @throws UnsupportedEncodingException * @throws NoSuchAlgorithmException */ public static boolean loginValid(String userName,String password) throws NoSuchAlgorithmException, UnsupportedEncodingException{ String pwdInDb = (String) Users.get (nama pengguna); if (null! = pwdindb) {// pengguna ini ada mengembalikan mymd5util.validpassword (kata sandi, pwdindb); } else {System.out.println ("Pengguna ini tidak ada!!"); mengembalikan false; }}}PS: Berikut adalah dua alat enkripsi MD5 lagi untuk Anda. Teman yang tertarik dapat merujuknya:
Alat Enkripsi Online MD5:
http://tools.vevb.com/password/createMd5password
Online MD5/Hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160 Alat Enkripsi:
http://tools.vevb.com/password/hash_md5_sha