В этой статье в основном представлены обще используемые алгоритмы шифрования для реализации Java - односторонние алгоритмы шифрования MD5 и SHA, следующим образом:
1. Архитектура безопасности Java
1.1 Введение в архитектуру безопасности Java
Предоставьте классы и интерфейсы для фреймворков безопасности в Java. API Security JDK является основным API языка программирования Java, расположенного в пакете Gava.security (и его подпакетах), а также в пакете Sun.securityApi (и его подпакетах). Разработанный, чтобы помочь разработчикам использовать как низкоуровневые, так и расширенные функции безопасности в своих программах.
Первый релиз JDK в JDK 1.1 представил «архитектуру шифрования Java шифрования» (JCA), которая относится к архитектуре, используемой для доступа и разработки функций пароля на платформе Java. В JDK 1.1 JCA включает в себя API для цифровых подписей и дайджестов сообщений. JDK 1.2 значительно расширяет архитектуру шифрования Java, он также обновляет инфраструктуру управления сертификатами для поддержки сертификатов X.509 V3 и вводит новую архитектуру безопасности Java для мелкозернистого, настраиваемого, гибкого и расширяемого контроля доступа.
Архитектура шифрования Java включает в себя связанные с паролем части API безопасности JDK 1.2, а также набор конвенций и спецификаций, представленных в этом документе. Для реализации нескольких, совместимых паролей он также предоставляет архитектуру «провайдера».
Расширение пароля Java (JCE)) расширяет API JCA, включая API для шифрования, обмена ключами и кодов аутентификации информации (MAC). Пароли JCE и JDK вместе предоставляют полный API пароля, который не связан с платформой. JCE как расширение JDK будет выпущено независимо для соблюдения ограничений управления экспортом США.
1.2 Связанный исходный код JDK в Eclipse
Чтобы более глубокое понимание реализации односторонних алгоритмов шифрования MD5 и SHA в Java, исходный код JDK может быть связан с использованием IDE Eclipse (автор использует JDK6.0).
После завершения установки JDK6.0 в каталоге JDK есть каталог SRC.ZIP (например, c: /java/jdk1.6.0_21). Этот каталог может быть разместил в другой каталог (например, D:/Amigo/исследование/Техническое эссе/201405). SRC.ZIP не содержит всего исходного кода JDK. Например, в SRC.ZIP не существуют субпаки под солнцем (например, пакет Sun.security и его подпаки, используемые в этой статье, не включены).
Чтобы загрузить эти подпакинги, вам нужно загрузить исходный код OpenJDK. OpenJDK является версией JDK с открытым исходным кодом и выпускается в виде протокола GPL. В JDK7 OpenJDK стал развитием основы JDK7. Sun JDK7 был выпущен на основе OpenJDK7. Большинство его исходных кодов одинаковы, и только небольшая часть исходных кодов была заменена. Опубликовано с использованием JRL (лицензия Javaresearch, лицензионное соглашение Java Research).
Openjdk загрузить адрес: //www.vevb.com/softs/75724.html
После загрузки скопируют все файлы и папки в Unzeped OpenJDK-6-SRC-B27-26_OCT_2012/JDK/SRC/SHARE/Class Directory в DESRIPD DICERC DIRC.
Затем настройте связанный исходный код в Eclipse: нажмите «Windows»-> «Настройки» и выберите «Java»-> «Установлен JRES» в левом меню. Если JRE этой машины был настроен, вам не нужно его настраивать. Если не настроить, нажмите кнопку «Добавить» справа и выберите путь установленного jdk6.0 во всплывающем окне «Добавить jre» (например, c: /java/jdk1.6.0_21). Нажмите кнопку «ОК», чтобы завершить настройки JRE.
Выберите «Установить JRE», нажмите кнопку «Редактировать ...» Справа, выберите пакет RT.JAR во всплывающем окне, нажмите кнопку «Приложение источника ...», нажмите кнопку «Внешняя папка ...» во всплывающем окне и укажите путь исходного кода на путь SRC только сейчас (EG. D:/Amigo/Исследование/Техническое эссе/201405). Смотрите рисунок ниже:
После нажатия кнопки «ОК», чтобы настроить ее, при написании реализации MD5 и SHA, призывая соответствующие методы MessageDigest, вы можете использовать режим отладки F5, чтобы просмотреть классы, участвующие в основном в реализации Algorithms Acryption Acryption MD5 и SHA.
1.3 Основные классы шифрования MD5 и SHA в JDK
В JDK6.0 классовые диаграммы нескольких классов, тесно связанных с MD5 и SHA, заключаются в следующем:
Среди них «MessageDigestSpi»-это абстрактный класс высшего уровня, а «MessageDigest» и «DigestBase» в одном и том же пакете-суб-абстрактные классы.
На классной диаграмме выше используется шаблон проектирования делегата. Принцип этого шаблона заключается в том, что класс B (вот внутренний класс делегажа) и класс A (вот класс MessageDigestSpi) - это два класса, которые не имеют отношения друг с другом. B имеет точно такие же методы и атрибуты, что и; и призывные методы и атрибуты в B-это вызывание методов и атрибутов с тем же именем в A. B, по-видимому, является посредником, уполномоченным A. Сторонним кодом, не нужно знать существование A и его подклассов, а также не нужно иметь прямую связь с A и его подклассами. Через B функции A могут быть непосредственно использованы, которые могут не только использовать различные функции A, но и хорошо защищать A и его подклассы.
Соответствующие коды для MD5 и SHA находятся в таких классах, как MD5 и SHA, но класс Abstract-MessageSt, обращенный к клиенту, не должен иметь дело с различными классами реализации, просто имейте дело с ними через класс делегатов.
2. Шифрование MD5
2.1 Обзор
Алгоритм Digest Message MD5 (китайское имя - алгоритм расщепления сообщений Fifth Edition) - хэш -функция, широко используемая в области безопасности компьютерной безопасности для обеспечения защиты целостности сообщений. Номер файла этого алгоритма - RFC 1321 (R.Rivest, MIT Laboratory для компьютерных наук и RSA Data Security Inc. April 1992).
Полным названием MD5 является алгоритм 5-раджестов сообщений 5 (Алгоритм информации об информационном акстракте), разработанный Рональдом Л. Ривестом из MIT Laboratory по компьютерным наукам и RSA Data Security Inc в начале 1990-х годов, и разработанный MD2, MD3 и MD4.
MD5 используется для обеспечения полной и последовательной передачи информации. Это один из алгоритмов хэш, широко используемых компьютерами (также переведенными в виде абстрактного алгоритма и алгоритма хэша). Основные языки программирования обычно реализуются MD5. Расчет данных (таких как китайские символы) в другое значение с фиксированной длиной является основным принципом алгоритма хэша. Предшественниками MD5 были MD2, MD3 и MD4.
Функция MD5 заключается в том, чтобы позволить информации о большой емкость «сжать» в конфиденциальный формат перед подписанием закрытого ключа с цифровым программным обеспечением для подписи (то есть для преобразования байтовой строки любой длины в шестнадцатеричную строку определенной длины).
2.2 Принципы алгоритма
Краткое описание алгоритма MD5 может быть следующим: MD5 обрабатывает входную информацию в 512-битных пакетах, и каждый пакет делится на 16 32-битных подпакетов. После серии обработки выходной сигнал алгоритма состоит из четырех 32-битных пакетов. После каскада этих четырех 32-разрядных пакетов будет сгенерировано 128-разрядное значение хешского значения.
В алгоритме MD5 информация должна быть заполнена сначала, так что результат оставшегося баланса пары 512 длины битов равен 448. Следовательно, длина бита информации будет расширена на N*512+448, n-неотрицательное целое число, а N может быть ноль. Метод заполнения выглядит следующим образом: заполните 1 и бесчисленные 0 позади информации и прекратите заполнять информацию 0 до тех пор, пока не будут выполнены вышеуказанные условия. Затем длина информации в верхней заполнении прикреплена в 64-битной бинарной. После этих двух этапов обработки длина бита информации = n*512+448+64 = (n+1)*512, то есть длина - это именно целое число из 512. Причина, по которой это состоит в том, чтобы соответствовать требованиям для длины информации в последующей обработке.
2.3 Реализация MD5 в Java
Реализация Java алгоритма шифрования MD5 выглядит следующим образом:
Пакет amigo.endecrypt; import java.security.messagedigest;/*** Использовать шифрование MD5* @author xingxing, xie* @datetime 2014-5-31*/public class md5util {/**** md5 incryption генерирует 32-bit md5 code* @param string @rectd* at-brypted* at-bryptted* at-bryptted Code*/ public Static String md5encode (String instr) Throws Exception {messagedigest md5 = null; try {md5 = messagegest.getinstance ("md5"); } catch (Exception e) {System.out.println (e.toString ()); e.printstacktrace (); возвращаться ""; } byte [] bytearray = instr.getbytes ("utf-8"); byte [] md5bytes = md5.digest (bytearray); StringBuffer hexValue = new StringBuffer (); for (int i = 0; i <md5bytes.length; i ++) {int val = ((int) md5bytes [i]) & 0xff; if (val <16) {hexvalue.append ("0"); } hexvalue.append (integer.tohexstring (val)); } вернуть hexvalue.toString (); } / ** * Тест основной функции * @param args * @throhs Exception * / public static void main (string args []) throws exception {string str = new String ("amigoxiexiexingxing"); System.out.println ("Original:" + str); System.out.println ("md5:" + md5encode (str)); }}Результаты теста:
Оригинал: Amigoxiexiexingxing
Post-MD5: E9AC094091B96B84CCA48098BC21B1D6
3. Ша шифрование
3.1 Обзор
SHA - это алгоритм шифрования данных. Этот алгоритм был разработан и улучшен экспертами по шифрованию за эти годы и становится все более совершенным. Теперь он стал одним из самых безопасных алгоритмов хеширования, расположенных и широко использовался. Идея этого алгоритма состоит в том, чтобы получить простой текст, а затем преобразовать его в (обычно меньший) текст шифра необратимым образом. Его также можно просто понимать как процесс принятия строки входных кодов (называемых преднамерением или информацией) и преобразования их в более низкую длину, фиксированную последовательность, то есть значения хеш (также известные как информационная дигест или код аутентификации информации). Можно сказать, что значение хеш -функции является своего рода «отпечатками пальца» или «сводным» открытого текста, поэтому цифровая подпись значения хэша может рассматриваться как цифровая подпись открытого текста.
Алгоритм безопасного хэш (SHA) - это национальный стандартный паб FIPS 180, выпущенный Национальным институтом стандартов и технологий. Последний стандарт был обновлен до FIPS Pub 180-3 в 2008 году. Среди них несколько однонаправленных алгоритмов хеширования, таких как SHA-1, SHA-224, SHA-256, SHA-384 и SHA-512. SHA-1, SHA-224 и SHA-256 подходят для сообщений с длиной не более 2^64 бинарных битов. SHA-384 и SHA-512 подходят для сообщений с длиной не более 2^128 бинарных битов.
3.2 Принцип
SHA-1-это алгоритм шифрования данных. Идея этого алгоритма состоит в том, чтобы получить простой текст, а затем преобразовать его в (обычно меньший) текст шифра необратимым образом. Его также можно просто понимать как процесс принятия строки входных кодов (называемых преднамерением или информацией) и преобразования их в более низкую длину, фиксированную последовательность, то есть значения хеш (также известные как информационная дигест или код аутентификации информации).
Безопасность односторонней хэш-функции заключается в сильном одностороннем характере его эксплуатационного процесса генерации значений хэша. Если пароль встроен в входную последовательность, никто не может генерировать правильное значение хэша, не зная пароля, обеспечивая тем самым его безопасность. SHA блокирует входные потоки в 512 бит (64 байта) на блок и производит 20 байтов вывода, называемых кодом аутентификации информации или дайджесты информации.
Длина входных пакетов этого алгоритма не ограничена, и генерируемый выход-160-битный дайджж для сообщений. Вход обрабатывается в 512-битных пакетах. SHA-1 необратимый, защищен от конфликта и имеет хороший эффект лавины.
Цифровая подпись может быть внедрена с помощью хэш -алгоритма. Принцип цифровой подписи состоит в том, чтобы преобразовать простой текст, который будет передаваться в дайджест сообщения с помощью операции функции (хэш) (разные простые тексты соответствуют различным дайджестам сообщения). Дайджест сообщения зашифруется и отправляется получателю вместе с простым текстом. Получатель генерирует новое дадест сообщений для расшифровки и сравнивает дайджест сообщения отправителя. Результат сравнения согласован, что означает, что простой текст не был изменен. Если это непоследовательно, это означает, что простой текст был подделан.
Mac (код аутентификации информации) является хэш -результатом, в котором часть входной информации является паролем. Только участники, которые знают этот пароль, могут снова рассчитать и проверить легитимность MAC -кода.
3.3 Реализация SHA на Java
Реализация Java SHA аналогична MD5, а эталонный код заключается в следующем:
package amigo.endecrypt;import java.security.MessageDigest;/** * Use SHAA encryption* @author Xingxing,Xie * @datetime 2014-6-1 */public class SHAUtil { /*** * SHA encryption generates 40-bit SHA code* @param string to be encrypted* @return Return 40-bit SHA code*/ public static String Shaencode (String instr) бросает исключение {MessageDigest sha = null; try {sha = messagegest.getinstance ("sha"); } catch (Exception e) {System.out.println (e.toString ()); e.printstacktrace (); возвращаться ""; } byte [] bytearray = instr.getbytes ("utf-8"); byte [] md5bytes = sha.digest (bytearray); StringBuffer hexValue = new StringBuffer (); for (int i = 0; i <md5bytes.length; i ++) {int val = ((int) md5bytes [i]) & 0xff; if (val <16) {hexvalue.append ("0"); } hexvalue.append (integer.tohexstring (val)); } вернуть hexvalue.toString (); } / ** * Тест основной функции * @param args * @throhs Exception * / public static void main (string args []) throws exception {string str = new String ("amigoxiexiexingxing"); System.out.println ("Original:" + str); System.out.println ("sha:" + shaencode (str)); }}Результаты теста следующие:
Оригинал: Amigoxiexiexingxing
После SHA: 04F79F496DD6BDAB3439511606528A4AD9CAAC5E
3. Сравнение между SHA-1 и MD5
Поскольку оба получены из MD4, SHA-1 и MD5 очень похожи друг на друга. Соответственно, их сила и другие характеристики похожи, но в следующих точках также есть различия:
1) Безопасность от принудительных атак: наиболее значимое и важное различие состоит в том, что дайджест SHA-1 на 32 бита длиннее, чем дайджест MD5. Используя принудительные технологии, сложность генерации любого сообщения, так что его дайджест равен данному дайджесту, является операцией порядка 2^128 для MD5 и операцией 2^160 для SHA-1. Таким образом, SHA-1 обладает большей силой для насильственных атак.
2) Безопасность анализа паролей: из-за проектирования MD5 он уязвим для анализа паролей, и SHA-1, по-видимому, менее восприимчив к таким атакам.
3) Скорость: на том же оборудовании SHA-1 работает медленно, чем MD5.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.