Kelas MessageDigest
Kelas MessagedIgest menyediakan aplikasi dengan fungsionalitas algoritma Informasi Digest, seperti algoritma MD5 atau SHA. Informasi Digest adalah fungsi hash satu arah yang aman yang menerima data dengan ukuran apa pun dan mengeluarkan nilai hash panjang tetap.
Objek MessageDigest mulai diinisialisasi. Objek ini memproses data dengan menggunakan metode pembaruan (). Anda dapat menghubungi metode reset () kapan saja untuk mengatur ulang ringkasan. Setelah semua data yang perlu diperbarui telah diperbarui, salah satu metode Digest () harus dipanggil untuk menyelesaikan perhitungan hash.
Metode Digest hanya dapat dipanggil sekali untuk sejumlah data pembaruan. Setelah pencernaan dipanggil, objek MessageDigest diatur ulang ke keadaan awalnya.
menjelaskan:
Di situs web, untuk melindungi informasi privasi seperti nama pengguna dan kata sandi anggota situs web, kami langsung mengenkripsinya dengan cara MD5 atau cara lain saat mendaftar. Bahkan administrator basis data tidak dapat melihat kata sandi anggota dan informasi lainnya. Efek kata sandi dalam database adalah seperti: 8E830882F03B2CB84D1A657F346DD41A efek.
Karena algoritma MD5 tidak dapat diubah, itu banyak digunakan oleh banyak situs web.
Tiga metode enkripsi yang umum digunakan
Metode 1: Gunakan operator bit untuk mengonversi data terenkripsi menjadi metode heksadesimal 2: Gunakan metode pemformatan untuk mengubah data terenkripsi menjadi hexadecimal (disarankan)
Metode 3: Gunakan algoritma untuk mengubah data terenkripsi menjadi heksadesimal
Impor java.security.messagedigest; impor java.security.nosuchalgorithmexception;/*** Gunakan kelas MessageDigest yang datang dengan Java* @author Xiaokui*/Kelas Public. Digest adalah 32 bit lebih panjang dari Digest MD5 (1byte = 8bit, setara dengan 4bytes panjang, 8 karakter lebih dari MD5 setelah konversi ke hexadecimal). * Untuk serangan paksa, MD5 adalah operasi urutan 2128 dan SHA-1 adalah operasi urutan 2160. * Kesulitan untuk dua pesan dengan pencernaan yang sama: MD5 adalah operasi 264 adalah operasi urutan besarnya, dan SHA-1 adalah operasi urutan 280 adalah operasi urutan besarnya. * Oleh karena itu, SHA-1 lebih kuat terhadap serangan paksa. Namun, karena SHA-1 memiliki lebih banyak langkah siklus daripada MD5 (80:64) dan cache yang akan diproses lebih besar (160 bit: 128 bit), SHA-1 berjalan perlahan dari MD5. * * @param Sumber string yang perlu dienkripsi * @param hashType tipe (md5 dan sha) * @return */public static getHash (sumber string, string hashtype) {// karakter yang digunakan untuk mengubah byte menjadi hexdigits [] = {'0 '9', 'a', 'b', 'c', 'd', 'e', 'f'}; coba {messageDigest md = messageDigest.getInstance (hashType); md.update (source.getbytes ()); // dengan memproses data menggunakan metode pembaruan, yang ditentukan byte yang diizinkan ke upoDED ke upoDEPREDED TERTEICED TEREDATED TERTANG md.digest (); // Dapatkan ciphertext untuk menyelesaikan perhitungan hash, dan menghasilkan char integer panjang 128-bit [] = char baru [16 * 2]; // Jika setiap byte diwakili dalam hexadecimal, menggunakan dua karakter iN = 0; // menunjukkan posisi karakter yang sesuai dalam hasil konversi untuk konversi untuk (iT i = 0; byte ke dalam karakter heksadesimal byte byte0 = encryptStr [i]; // ambil byte i-th stred [k ++] = hexdigits [byte0 >>> 4 & 0xf]; // Ambil konversi numerik dari 4 bits = byte, >> untuk shift logis kanan, simbol Bits. Take the numerical conversion of the lower 4 bits in byte}return new String(str);// Convert the result after conversion to a string}catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}/** @param source string that needs to be encrypted* @param hashType Encryption type (MD5 and SHA) * @return */public string statis getHash2 (sumber string, string hashType) {stringBuilder sb = new stringBuilder (); MessageSmest md5; coba {md5 = messageSageTigest.getInstance (hashType); md5.update (source.getbytes ()); for (byte b: md5.dig.digest (source.getbytes ()); for (byte b: md5.dig.digest () () () (); for (byte b: md5.dig.digest () () ()); for (byte b: md5.dig.digest () () ()); for (byte b: md5.dig.digest {sb.append (string.format ("%02x", b)); // desimal ke heksadesimal, x berarti output dalam heksadesimal, 02 menunjukkan bahwa ada kurang dari dua digit sebelum output 0} return sb.tostring ();} catch (nosuchalgorith orpepticception {) (nosuchalgorMexception {) {nosuchalgorithsception {) {nosuchalgorith {nosuchalgorith {nosuchalgorith {nosuchalgorith {nosuchalgorith {nosuchalgorith {nosuchalgorith {nosuchalgorith {nosuchalgorMexception (nosuchalgorMException null;}/** @param Sumber string yang perlu dienkripsi* @param hashType tipe (md5 dan sha)* @return*/public string getHash3 (sumber string, string hashType) {// yang digunakan untuk mengonversi byte menjadi hexdigits [] = {'0' '', '' ',' '', '' '', '3,' 3, '3, 2, 2,' 3, '', '', '', '' ',' '', '' ',' '', '' ',' '', '' ',' '', '' ',' '' ',' '', '' ',' '', '' ',' '', '' ',' '' ',' '' ',' '' ',' '' ',' '', '' '', '' '', '' '', '' '', '' '', '' '', '' '' ',' '' '', '' '' '' ',' '' ', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; stringBuilder sb = new stringBuilder (); MessageDigest md5; coba {md5 = MessageSedIgest.getInstance (hashtype); md5.update = source = messageDigest. md5.gigest (); for (int i = 0; i <encryptstr.length; i ++) {int iret = encryptStr [i]; if (iret <0) {iret += 256;} int id1 = iret / 16; int id2 = iRet % 16; sb.Append (hexdigits [id nead1] [iD2 = IRET % 16; SB.Append (hexdigits [ID1] [ID1] [ID2 = IREX % 16; SB.Append (hexdigits [ID1] [ID1] [ID2] [IREX % 16; SB.Append (hEXDIGITS [ID1 [ID1] [ID2] "heX % 16; SB.Append (HEXDIGITS [ID1 [ID1] [ID1]" IDE2 = SB. sb.tostring ();} catch (nosuchalgorithmException e) {e.printstacktrace ();} return null;} public static void main (string [] args) {System.out.println (gethash ("xiaokui", "md5"); "outln (" xiaokui "," md5 "); system.out.out.out. "/n");System.out.println(getHash2("Xiaokui", "MD5"));System.out.println(getHash2("Xiaokui", "SHA") + "/n");System.out.println(getHash3("Xiaokui", "Md5")); System.out.println (gethash3 ("xiaokui", "sha") + "/n");}}Hasil output
8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB7138 8E8308882F03B2CB84D1A657F346DDD41A 0BA5512371D00C86E91712F44AAB713898745F91 8E830882F03B2CB84D1A657F346DD41A 0BA512371D00C86E9171717F444444441744444444444444444171
Kami menemukan bahwa tiga metode melakukan efek yang sama, dan panjang SHA adalah 8 karakter (32 bit) lebih dari MD5.
Meringkaskan
Di atas adalah seluruh konten dari artikel ini tentang contoh kode kelas Enkripsi Kelas MessageDigest yang dilengkapi dengan Java. Saya harap ini akan membantu semua orang. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya.