Проект уже опубликован в jcenter, mavenCentral (до версии 1.8.0) и jitpack (начиная с версии v1.8.1).
Compile 'top.jfunc.common:common-crypto:${version}'
Maven { url 'https://jitpack.io' }
Compile 'com.gitee.xxssyyyyssxx:common-crypto:${version}'
Этот модуль определяет основной интерфейс Crypto, который абстрагирует шифрование и дешифрование. Он поддерживает симметричное и асимметричное шифрование, позволяя использовать различные алгоритмы. Также можно применять этот интерфейс для хэш-функций, но они не могут быть обращены. С помощью CompositeCrypto можно легко реализовать многоуровневое шифрование и дешифрование.
Реализация интерфейса Crypto включает симметричные реализации (AES/DES/...) и асимметричные реализации (RSA...), а также реализации хэш-функций (MD5/hmac...).
/**
* Интерфейс шифрования и дешифрования, для MD5, SHA1 и других хэш-алгоритмов метод дешифровки напрямую выбрасывает исключение.
* Если встречается результат или аргумент является массивом байтов, по умолчанию он преобразуется в шестнадцатеричную строку для удобства использования String.
* Шифрование и дешифрование на самом деле лучше всего подходит для работы с массивами байтов, а не со строками.
* @author 熊诗言
* @see RadixUtil#toHex(byte[])
* @see RadixUtil#toBytes(String)
*/
public interface Crypto {
/**
* Шифрует данные.
* @param src Массив байтов для шифрования.
* @return Зашифрованные данные.
*/
byte[] encrypt(byte[] src);
/**
* Дешифрует данные.
* @param src Массив байтов для дешифровки.
* @return Дешифрованные данные.
*/
byte[] decrypt(byte[] src);
/**
* Шифрует данные, используя входной поток и выходной поток.
* Этот метод следует использовать только для небольших объёмов данных, так как он использует буферный массив. Для больших объёмов данных рекомендуется реализовать собственный метод.
* @param in Входной поток.
* @param out Выходной поток.
*/
default void encrypt(InputStream in, OutputStream out){
try {
// ByteArrayOutputStream baos = new ByteArrayOutputStream();
FastByteArrayOutputStream baos = new FastByteArrayOutputStream();
IoUtil.copy(in,baos);
byte[] bytes = baos.toByteArray();
byte[] encrypted = encrypt(bytes);
out.write(encrypted);
} catch (Exception e) {
throw new CryptoException(e);
}
}
/**
* Расшифровывает данные, используя входной и выходной потоки.
* Этот метод следует использовать только для небольших объёмов данных, так как он использует буферный массив. Для больших объёмов данных рекомендуется реализовать собственный метод.
* @param in Входной поток.
* @param out Выходной поток.
*/
default void decrypt(InputStream in, OutputStream out) {
try {
//ByteArrayOutputStream baos = new ByteArrayOutputStream();
FastByteArrayOutputStream baos = new FastByteArrayOutputStream();
IoUtil.copy(in,baos);
byte[] bytes = baos.toByteArray();
byte[] decrypted = decrypt(bytes);
out.write(decrypted);
} catch (Exception e) {
throw new CryptoException(e);
}
}
/**
* Шифрует строку.
* @param src Исходная строка.
* @param charset Кодировка символов.
* @return Зашифрованная строка.
*/
default String encrypt(String src,String charset){
byte[] bytes = src.getBytes(CharsetUtil.charset(charset));
byte[] encrypted = encrypt(bytes);
return RadixUtil.toHex(encrypted);
}
/**
* Шифрует строку.
* @param src Исходная строка.
* @return Зашифрованная строка.
*/
default String encrypt(String src){
byte[] bytes = src.getBytes(CharsetUtil.CHARSET_UTF_8);
byte[] encrypted = encrypt(bytes);
return RadixUtil.toHex(encrypted);
}
/**
* Дешифрует строку.
* @param src Зашифрованная строка.
* @return Расшифрованная строка.
*/
default String decrypt(String src){
byte[] bytes = RadixUtil.toBytes(src);
byte[] decrypted = decrypt(bytes);
return new String(decrypted);
}
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )