MOSSAGEDIGEST Class
Класс MessageDigest предоставляет приложения с функциональностью алгоритмов расщепления информации, таких как алгоритмы MD5 или SHA. Информационная дайджест-это безопасная односторонняя хэш-функция, которая получает данные любого размера и выводит хэш-значение с фиксированной длиной.
Объект MessageDigest начинает инициализироваться. Этот объект обрабатывает данные с помощью метода Update (). Вы можете вызвать метод сброса () в любое время, чтобы сбросить резюме. Как только все данные, которые необходимо обновить, были обновлены, один из методов Digest () должен быть вызван для завершения расчета хэша.
Метод дайджеста может быть вызван только один раз для данного объема данных обновлений. После того, как дайджест называется, объект MassAgeIgest сбрасывается в его начальное состояние.
иллюстрировать:
На веб -сайте, чтобы защитить информацию о конфиденциальности, такую как имя пользователя и пароль участника веб -сайта, мы напрямую зашифруем ее MD5 или другими способами при регистрации. Даже администратор базы данных не может просмотреть пароль участника и другую информацию. Эффект пароля в базе данных такой, как: 8E830882F03B2CB84D1A657F346DD41A.
Поскольку алгоритм MD5 необратимый, он широко используется многими веб -сайтами.
Три часто используемые методы шифрования
Метод 1: Используйте операторы битов для преобразования зашифрованных данных в шестнадцатеричный метод 2: Используйте метод форматирования для преобразования зашифрованных данных в шестнадцатеричную (рекомендуется)
Метод 3: Используйте алгоритм для преобразования зашифрованных данных в шестнадцатеричную
Импорт java.security.messagedigest; import java.security.nosuchalgorithmexception;/*** Используйте класс MessageDigest, который поставляется с Java* @author xiaokui*/public Class EncryptionUtil {/*** Поскольку MD5 и SHA-1-это MD4, их структура и силовые характеристики-многоец* Дайджест на 32 бита длиннее, чем дайджест MD5 (1Byte = 8 -битный, эквивалентный длине 4Bytes, на 8 символов больше, чем MD5 после преобразования в шестнадцатеричную). * Для принудительных атак, MD5 является операцией порядка 2128, а SHA-1 является операцией порядка 2160 года. * Сложность для двух сообщений с одним и тем же дайджестом: MD5-это операция 264-это операция по порядку величины, а SHA-1 является операцией порядка 280-это операция порядка. * Поэтому SHA-1 более сильна против принудительных атак. Однако, поскольку SHA-1 имеет больше этапов цикла, чем MD5 (80:64), а кэш, который должен быть обработан, больше (160 бит: 128 бит), SHA-1 работает медленно, чем MD5. * * @param исходная строка, которую необходимо зашифровать * @param Hashtype Type Type (MD5 и SHA) * @return */public Static String Gethash (источник строки, строка хэштип) {// Используемые для преобразования байтов в Hexdigits [] = {'0', '1', '2', '3', '4', '5', ',', ',', ',', ',', ',', ',', ',', '4', ',', ',', ',', ',', ',' 2 '. '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; try {messagedigest md = messagedigest.getinstance (hashtype); md.update (source.getbytes ()); // обработка данных с использованием обновления, указанный rafte rafts uppletres recryttr. Md.digest (); // Получить зашифрованный текст для завершения расчета хеш-хэш и создать 128-битный длинный целый ровный str [] = new char [16 * 2]; // Если каждый байт представлен в шестигранном в шестнадцатеричные символы Byte Byte0 = EncryptStr [i]; // возьмите i-th byte str [k ++] = hexdigits [byte0 >>> 4 & 0xf]; // Возьмите численное преобразование верхних 4 битов в байте, >> для логического сдвига справа, сдвигайте биты символа вправо вместе str [K ++] Возьмите численное преобразование нижних 4 бит в байте} Вернуть новую строку (str); // преобразование результата после преобразования в строку} catch (nosuchalgorithmexception e) {e.printstacktrace ();} return null;}/** @param source String and sha* @param hashtype encrypte incryption chypuren и sha @param chsryp Статическая строка gethash2 (String Source, String hashtype) {StringBuilder sb = new StringBuilder (); MessagedIgest md5; try {md5 = messagedigest.getinstance (hashtype); md5.update (source.getbytes ()); для (byte b: md5.digest ()) {sb.Append (string.format ("%02x", b)); // десятичный к шестнадцатеричной, x означает выход в шестнадцатеричном, 02 указывает на то, что до двух цифр до 0} return sb.toString ();} Catch (nosuchalgorithmexcept @Param Source String, который необходимо зашифровать * @param Hashtype Encryption Type (MD5 и SHA) * @return */public Static String Gethash3 (источник строки, строка хэштип) {// Используемые символы для преобразования байтов в Hexdigits [] = {'0,' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 5 ',' 4 ',' 4 ',' 4 ',' 4 ',' 4 ',', ',', ',', '1', '2', ',', ']' '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; stringbuilder sb = new StringBuilder (); MessagedIgest MD5; try {md5 = messagedigest.getNstance (hashtype); md55.update (source.getbytes (); bytetrttrttrttrttrtsttrtsttrtsttr md5.digest (); for (int i = 0; i <incryptstr.length; i ++) {int iret = incryptstr [i]; if (iret <0) {iret += 256;} int id1 = iret / 16; int2 = iret % 16; sb.Append (hexdigits [id1] +"" +hextiT % sb.toString ();} catch (nosuchalgorithmexception e) {e.printstacktrace ();} return null;} public static void main (string [] args) {System.out.println (gethash ("xiaokui", "md5"); System.out.println (gethash (",", ",", "Shiaokui", "MD5"); "/n"); System.out.println(gethash2("xiaokui", "md5")); System.out.println (gethash2 ("xiaokui", "sha") + "/n"); system.out.println(gethash3("xiokui", "Md5")); System.out.println (gethash3 ("xiaokui", "sha") + "/n");}}Результат вывода
8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB7138 8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB713898745F91 8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB71398745F91
Мы обнаружили, что три метода выполняли тот же эффект, а длина SHA составляет 8 символов (32 бита) больше, чем MD5.
Суммировать
Выше приведено все содержание этой статьи о примере кода класса класса шифрования, который поставляется с Java. Я надеюсь, что это будет полезно для всех. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это.