Алгоритм симметричного шифрования — это более ранний алгоритм шифрования с отработанной технологией. В алгоритме симметричного шифрования отправитель данных обрабатывает открытый текст (исходные данные) и ключ шифрования (ми юэ) вместе с помощью специального алгоритма шифрования, превращая их в сложный зашифрованный зашифрованный текст и отправляя его. После того, как получатель получил зашифрованный текст, если он хочет расшифровать исходный текст, ему необходимо использовать ключ, используемый для шифрования, и обратный алгоритм того же алгоритма для расшифровки зашифрованного текста, чтобы восстановить его до читаемого открытого текста. В алгоритме симметричного шифрования используется только один ключ. И отправитель, и получатель используют этот ключ для шифрования и дешифрования данных. Это требует, чтобы дешифратор заранее знал ключ шифрования.
Простые алгоритмы шифрования Java:
Строго говоря, BASE — это формат кодирования, а не алгоритм шифрования.
MD (алгоритм дайджеста сообщения, алгоритм дайджеста сообщения)
SHA (алгоритм безопасного хеширования, алгоритм безопасного хеширования)
HMAC (код аутентификации хеш-сообщения, код аутентификации хэш-сообщения)
Тип 1. БАЗА
Base — один из наиболее распространенных методов кодирования для передачи бит-байтовых кодов в Интернете. Вы можете просмотреть RFC~RFC, в котором приведены подробные спецификации MIME. Базовое кодирование может использоваться для передачи более длинной идентификационной информации в среде HTTP. Например, в системе Java Persistence Hibernate Base используется для кодирования длинного уникального идентификатора (обычно -битного UUID) в строку, которая используется в качестве параметров в формах HTTP и URL-адресах HTTP GET. В других приложениях часто необходимо закодировать двоичные данные в форму, удобную для размещения в URL-адресе (включая скрытые поля формы). В это время базовая кодировка не читается, то есть закодированные данные не будут видны невооруженным глазом. (Источник: Энциклопедия Baidu)
код реализации Java:
package com.cn. Одностороннее шифрование; import sun.misc.BASEEncoder;/*Шифрование и дешифрование BASE являются двусторонними, и можно найти обратное решение — неофициальную реализацию JDK. занятия. Хотя его можно найти и использовать в JDK, его нельзя найти в API. Классы, начинающиеся с sun и com.sun в JRE, недокументированы. Они относятся к основе библиотек классов java и javax. Большинство их реализаций связаны с базовой платформой и обычно не рекомендуются. Строго говоря, BASE — это формат кодирования, а алгоритмы, не относящиеся к шифрованию, в основном включают в себя два класса BASEEncoder и BASEDecoder. Нам нужно только знать, как использовать соответствующие методы. Кроме того, количество байтов, сгенерированных после шифрования BASE, кратно . Если количество байтов недостаточно, заполните его символом =. BASE Согласно определению RFC, Base определяется как: Базовое кодирование передачи контента предназначено для описания любой последовательности битов в форме, которая нелегко распознается непосредственно человеком. (Базовое кодирование передачи контента предназначено для представления произвольных последовательностей октетов в форме, которая не обязательно должна быть удобочитаемой для человека.) Обычно встречается в электронных письмах и HTTP-шифровании. При перехвате информации http вы найдете поля имени пользователя и пароля для входа в систему. Операции зашифрованы через BASE. */public class BASE { /** * Расшифровка BASE* * @param key * @return * @throws Exception */ public static byte[] decryptBASE(String key) выбрасывает Exception { return (new BASEDecoder()).decodeBuffer(key) } /** * BASE-шифрование* * @param key * @return * @throws Exception */ public static String encryptBASE(byte[] key) выдает исключение { return (new BASEEncoder()).encodeBuffer(key); } public static void main(String[] args) {String str=""; попробуйте {String result = BASE.encryptBASE(str.getBytes()); out.println("result=====зашифрованные данные=========="+result); byte result[]= BASE.decryptBASE(result); str=new String(result); System.out.println("str========Расшифрованные данные========"+str); } catch (Exception e) { e.printStackTrace( ); } }}
Второй тип МД.
MD — это алгоритм дайджеста сообщений (Message-Digest Algorithm), который используется для обеспечения полной и последовательной передачи информации. Это один из алгоритмов хэширования, широко используемых в компьютерах (также переводится как алгоритм дайджеста, а алгоритм хэширования обычно реализуется в основных языках программирования). Вычисление данных (например, китайских иероглифов) в другое значение фиксированной длины является основным принципом алгоритма хэширования. Предшественниками MD являются MD, MD и MD. Широко используется в технологиях шифрования и дешифрования, часто используется для проверки файлов. проверять? Независимо от размера файла, после MD может быть сгенерировано уникальное значение MD. Например, текущая калибровка ISO — калибровка MD. Как его использовать? Конечно, значение MD генерируется после прохождения ISO через MD. Друзья, скачавшие linux-ISO, обычно видели строку MD рядом со ссылкой для скачивания. Он используется для проверки согласованности файлов.
Java-реализация:
пакет com.cn. Одностороннее шифрование; import java.math.BigInteger; import java.security.MessageDigest;/*MD (алгоритм дайджеста сообщения, алгоритм дайджеста сообщения) Обычно мы не используем указанное выше MD-шифрование напрямую. Обычно массив байтов, сгенерированный MD, передается в BASE, а затем шифруется для получения соответствующей строки. Дайджест: сборка*/public class MD { public static Final String KEY_MD = "MD"; public static String getResult(String inputStr) { System .out.println("========Данные перед шифрованием:"+inputStr bigInteger=null; try { MessageDigest md =); MessageDigest.getInstance(KEY_MD); inputData = inputStr.getBytes(); md.update(inputData); bigInteger = new BigInteger(md.digest()); } catch (Исключение e) {e.printStackTrace(); } System.out.println("После шифрования MD:" + bigInteger.toString()); bigInteger.toString(); } public static void main(String args[]) { try { String inputStr = "Простое шифрование"; getResult(inputStr); } catch (Exception e) { e.printStackTrace() } };
Алгоритм MD имеет следующие характеристики:
Сжимаемость: для данных любой длины длина рассчитанного значения MD фиксирована.
, Легко рассчитать: значение MD легко рассчитать на основе исходных данных.
Устойчивость к модификации: если в исходные данные будут внесены какие-либо изменения, даже если будет изменен только один байт, результирующее значение MD будет сильно отличаться.
, Слабая антиколлизия: Зная исходные данные и их значение MD, очень сложно найти данные с тем же значением MD (то есть поддельные данные).
, Сильная защита от столкновений: очень сложно найти два разных данных, чтобы они имели одинаковое значение MD.
Функция MD заключается в том, чтобы позволить «сжать» информацию большой емкости в конфиденциальный формат (то есть преобразовать строку байтов любой длины в строку шестнадцатеричных цифр определенной длины) перед подписанием закрытого ключа цифровой подписью. программное обеспечение для подписи. Помимо MD, к более известным относятся sha-, RIPEMD и Haval.
Третий тип.ША
Алгоритм безопасного хеширования в основном применим к алгоритму цифровой подписи DSA, определенному в стандарте цифровой подписи DSS. Для сообщений длиной менее ^ бит SHA создает однобитный дайджест сообщения. Этот алгоритм разрабатывался и совершенствовался экспертами по шифрованию на протяжении многих лет, и с тех пор он становится все более совершенным и широко используется. Идея этого алгоритма состоит в том, чтобы получить фрагмент открытого текста и затем необратимым образом преобразовать его в фрагмент (обычно меньшего размера) зашифрованного текста. Его также можно просто понимать как получение строки входных кодов (так называемое предварительное отображение). или информация), а также процесс их преобразования в более короткую выходную последовательность с фиксированными цифрами, то есть хеш-значение (также называемое дайджестом сообщения или кодом аутентификации сообщения). Можно сказать, что значение хэш-функции является «отпечатком пальца» или «дайджестом» открытого текста, поэтому цифровая подпись значения хеш-функции может рассматриваться как цифровая подпись открытого текста.
Java-реализация:
пакет com.cn Одностороннее шифрование; import java.math.BigInteger; import java.security.MessageDigest;/*SHA (алгоритм безопасного хеширования), цифровая подпись и другие важные инструменты в криптографических приложениях. Он широко используется в таких областях информационной безопасности, как электронная коммерция. Хотя и SHA, и MD были взломаны с помощью методов коллизии, SHA по-прежнему является признанным безопасным алгоритмом шифрования и более безопасен, чем MD*/public class SHA { public static Final String KEY_SHA = "SHA" public static String getResult( String inputStr) { BigInteger sha =null; System.out.println("========Данные перед шифрованием:"+inputStr[] inputData =); inputStr.getBytes(); try { MessageDigest messageDigest = MessageDigest.getInstance(KEY_SHA); messageDigest.update(inputData); sha = new BigInteger(messageDigest.digest()); sha.toString()); } catch (Исключение e) {e.printStackTrace();} return sha.toString(); } public static void main(String args[]) { try { String inputStr = "Простое шифрование"; getResult(inputStr); } catch (Exception e) { e.printStackTrace() } };
SHA-сравнение с MD
Поскольку оба они произошли от MD, SHA- и MD очень похожи друг на друга. Соответственно, их сильные стороны и другие характеристики схожи, но есть несколько отличий:
Защита от атак методом перебора. Наиболее существенным и важным отличием является то, что SHA-дайджест длиннее, чем MD-дайджест. Используя методы грубой силы, сложность создания любого сообщения, дайджест которого равен данному дайджесту сообщения, является операцией порядка величины для MD и операцией порядка величины для SHA-. Таким образом, SHA- имеет большую устойчивость к атакам грубой силы.
Защита от криптоанализа. Из-за конструкции MD, которая уязвима для атак криптоанализа, SHA- кажется менее уязвимым для таких атак.
Скорость: SHA- работает медленнее, чем MD на том же оборудовании.
Четвертый тип.HMAC
HMAC (код аутентификации хэш-сообщения, код аутентификации хэш-сообщения, протокол аутентификации, основанный на алгоритме хеширования ключа. Принцип кода аутентификации сообщения для достижения аутентификации заключается в использовании общедоступной функции и ключа для генерации значения фиксированной длины в качестве идентификатора аутентификации. Используйте Это определяет целостность сообщения. Используйте ключ для создания небольшого блока данных фиксированного размера, а именно MAC, и добавьте его в сообщение, а затем передайте его, используя ключ, предоставленный отправителю для аутентификации.
код реализации Java:
пакет com.cn.Одностороннее шифрование;/*HMACHMAC(Аутентификация хэш-сообщения Код, хэш-код аутентификации сообщения, протокол аутентификации на основе ключа. Алгоритм хеширования. Принцип кода аутентификации сообщения заключается в использовании общедоступной функции и ключа для генерации значения фиксированной длины в качестве идентификатора аутентификации и использовании этого идентификатора для аутентификации целостности. Пол. Используйте ключ, чтобы сгенерировать небольшой блок данных фиксированного размера, а именно MAC, и добавить его в сообщение, а затем передать его. Получатель использует общий с отправителем ключ для аутентификации и т. д. */import. javax.crypto.KeyGenerator;импорт. javax.crypto.Mac;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import com.cn.comm.Tools;/** * Базовый компонент шифрования*/ public Abstract class HMAC { public static Final String KEY_MAC = "HmacMD"; /** * Инициализировать ключ HMAC* * @return * @throws Exception */ public static String initMacKey() выдает исключение { KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_MAC); SecretKey secretKey = keyGenerator.generateKey(); return BASE.encryptBASE(secretKey.getEncoded()); } /** * Шифрование HMAC: основной метод * * @param data * @param key * @return * @throws Exception */ public static String encryptHMAC (данные byte[], строковый ключ) выдает исключение { SecretKey secretKey = новый SecretKeySpec(BASE.decryptBASE(key), KEY_MAC); Mac = Mac.getInstance(secretKey.getAlgorithm()); mac.init(secretKey); return new String(mac.doFinal(data)); static String getResult(String inputStr) { String path=Tools.getClassPath(); fileSource=path+"/file/HMAC_key.txt"; System.out.println("========Данные перед шифрованием:"+inputStr result=null; try { byte[] inputData = inputStr. getBytes(); String key = HMAC.initMacKey(); /*Сгенерировать ключ*/ System.out.println("Mac key:===" + key); /*Записать ключ в файл*/ Tools.WriteMyFile(fileSource,key); result= HMAC.encryptHMAC(inputData, key); System.out.println("После шифрования HMAC:===" + результат); } catch (Exception e) {e.printStackTrace( );} return result.toString() } public static String getResult(String inputStr) {; System.out.println("========Данные перед шифрованием: "+inputStr path=Tools.getClassPath(); String fileSource=path+"/file/HMAC_key.txt"; ;; try { /*Считать ключ из файла*/ key=Tools.ReadMyFile(fileSource); System.out.println("getResult key:===" + key } catch); (Исключение e) { e.printStackTrace();} String result=null; try { byte[] inputData = inputStr.getBytes(); /*Шифрование данных*/ result= HMAC.encryptHMAC(inputData, key System .out); .println("После шифрования HMAC:===" + result); } catch (Exception e) {e.printStackTrace();} return result.toString(); main(String args[]) { try { String inputStr = "Простое шифрование"; /*Используйте один и тот же ключ: Зашифруйте данные: проверьте, совпадают ли результаты двух шифрования*/ getResult(inputStr); ); } catch (Исключение е) { e.printStackTrace() } }};
Вышеупомянутое содержимое представляет собой несколько алгоритмов шифрования (четыре типа), обычно используемых в Java, которыми поделился редактор. Надеюсь, оно вам понравится.