Основы: использование класса MessageDigest
Фактически, чтобы завершить шифрование MD5 в Java, большая часть класса MessageDigest поможет вам реализовать, и достаточно нескольких строк кода: достаточно:
/** * Encrypt the String md5 * * @param str * @return */import java.security.messagedigest; public Static String getMd5 (String Str) {try {// генерировать расчет шифрования MD5 (MD5 "); // Рассчитать функцию MD5 Md.Update (str.getBytes ()); // Digest () Наконец определяет, что значение хеша MD5 возвращается, а возвратное значение составляет 8 в качестве строки. Поскольку значение хэша MD5 представляет собой 16-битное шестигранное значение, на самом деле это 8-битный символ // функция BigInteger преобразует 8-битную строку в 16-битное шестигранное значение и представляет его как строку; Получает значение хэша в форме строки, возвращающего новый BigInteger (1, Md.digest ()). ToString (16); } catch (Exception e) {Throw New SpeedException ("произошла ошибка шифрования MD5"); }} Advanced: шифрование и дешифрование
Java реализует классы шифрования и дешифрования MD5, с помощью тестовых классов, см. Код для деталей.
Класс шифрования и дешифрования MD5 - Mymd5util, код выглядит следующим образом
пакет com.zyg.security.md5; импорт java.io.unsupportedencodingexception; импорт java.security.messagedigest; импорт java.security.nosuchalgorithmexcept Hex_nums_str = "0123456789abcdef"; Частное статическое окончательное целое число соли_лд длиной = 12; / ** * Преобразовать шестигранные строки в байтовые массивы * @param hex * @return * / public static byte [] hexstringtobyte (String hex) {int len = (hex.length () / 2); byte [] result = new Byte [len]; char [] hexchars = hex.tochararray (); for (int i = 0; i <len; i ++) {int pos = i * 2; Результат [i] = (byte) (hex_nums_str.indexof (hexchars [pos]) << 4 | hex_nums_str.indexof (hexchars [pos + 1])); } return Result; } / ** * Преобразовать указанный байтовый массив в шестнадцатеричную строку * @param b * @return * / public Static String bytetohexstring (byte [] b) {stringbuffer hexstring = new StringBuffer (); for (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 ()); } вернуть hexstring.toString (); } /** * Проверьте, является ли пароль законным * @param password * @param password indb * @return * @throws nosuchalgorithmexception * @throws unsupportedencodingexception * /publin byte [] pwdindb = hexstringtobyte (passwordIndb); // Объявит байт солевой вариации [] соль = новый байт [salt_length]; // извлекать соль из байтового массива, сохраненной в системе базы данных. Arraycopy (pwdindb, 0, Salt, 0, Salt_length); // Создать объект сообщения Digest MessageGest MD = MOSSAGEDIGEST.GETINSTANCE ("MD5"); // Пауза данных соли в объект Digest Message Md.update (соль); // передавать данные пароля в объект DIGEST Message md.update (password.getbytes ("utf-8")); // Сгенерировать дигест сообщений в входном пароле byte [] digest = md.digest (); // Объявит переменную, которая сохраняет дадест сообщений пароля в базе данных Byte [] digestIndb = новый байт [pwdindb.length - salt_length]; // Получить усваивание сообщений пароля в системе базы данных. Arraycopy (pwdindb, salt_length, digestindb, 0, digestindb.length); // Сравните, является ли диварийный сигнал, сгенерированный на основе ввода пароля, такой же, как и дайдж для сообщений в базе данных if (arrays.equals (digest, digestindb)) {// пароль правильно возвращает сообщение сопоставления пароля true; } else {// пароль неверный возвращает сообщение несоответствия пароля возврата false; }} /** * Получить зашифрованный шестнадцатеричный пароль * @param password * @return * @throws nosuchalgorithmexception * @throws unsupportedencodingexception * /public static getencryptedpwd (строковое пароль). байт [] pwd = null; // генератор случайных чисел securerandom random = new Securerandom (); // Объявит вариабельный массив солевой массив [] соль = новый байт [salt_length]; // Поместите случайное число в переменную соль random.nextbytes (соль); // Объявит объект Digest сообщений MessageGegest MD = null; // Создать сообщение Digest MD = MOSSAGEDIGEST.GETINSTANCE ("MD5"); // Пауза данных соли в объект Digest Message Md.update (соль); // передавать данные пароля в объект Digest Message md.update (password.getbytes ("utf-8")); // Получить байтовый массив сообщения Digest Byte [] digest = md.digest (); // Поскольку соль должна храниться в байтовом массиве пароля, добавьте байт длины соли pwd = новый байт [digest.length + salt_length]; // скопировать байты соли первыми 12 байтами сгенерированного зашифрованного массива пароля, чтобы получить соль при проверке системы пароля. // Скопируйте дигрест сообщения на байты в зашифрованном массиве байтов пароля, начиная с 13 -й байтовой системы. Arraycopy (Digest, 0, Pwd, Salt_length, digest.length); // конвертировать формат массива в шестнадцатеричном формате шестнадцатеричного формата шестнадцатеричного формата в шестнадцатеричном формате обратной строки (PWD); }}Тестовый класс - Клиент, код выглядит следующим образом:
пакет com.zyg.security.md5; импорт java.io.unsupportedencodingexception; импорт java.security.nosuchalgorithmexception; импорт java.util.hashmap; импорт java.util.map; public client rult {частная статическая карта пользователи = new hashmap (); public static void main (string [] args) {string username = "zyg"; String password = "123"; RegisterUser (имя пользователя, пароль); username = "Changong"; пароль = "456"; RegisterUser (имя пользователя, пароль); String loginUserid = "ZYG"; String pwd = "1232"; try {if (loginvalid (loginUserid, pwd)) {System.out.println ("Добро пожаловать в логин !!!"); } else {System.out.println ("Ошибка пароля, пожалуйста, повторно введите !!!); }} catch (nosuchalgorithmexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } catch (unsupportedencodingexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} / ** * Зарегистрированный пользователь * * @param username * @param password * / public static void RegisterUser (String username, String Password) {String encryptedPwd = null; try {encryptedPwd = mymd5util.getEncryptedPwd (пароль); users.put (имя пользователя, EncryptedPwd); } catch (nosuchalgorithmexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } catch (unsupportedencodingexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} / ** * verification login * * @param username * @param password * @return * @Throws UnsUpportEdenCodingException * @Throws nosuchAlgoritHmexception * / public Static Boolean LoginValid (String username, String Password) Thrious nosuchAlgoritHmexcept (String) users.get (username); if (null! = pwdindb) {// Этот пользователь существует возвращать mymd5util.validpassword (пароль, pwdindb); } else {System.out.println ("этого пользователя не существует!!!"); вернуть ложь; }}}PS: Вот еще два инструмента шифрования MD5 для вас. Заинтересованные друзья могут ссылаться на это:
Инструмент онлайн -шифрования MD5:
http://tools.vevb.com/password/createmd5password
Онлайн MD5/HASH/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160 Инструмент шифрования:
http://tools.vevb.com/password/hash_md5_sha