1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/xxssyyyyssxx-common-crypto

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Модуль шифрования и дешифрования (crypto)

Проект уже опубликован в jcenter, mavenCentral (до версии 1.8.0) и jitpack (начиная с версии v1.8.1).

MavenCentral и jcenter

Compile 'top.jfunc.common:common-crypto:${version}'

Jitpack

Maven { url 'https://jitpack.io' } Compile 'com.gitee.xxssyyyyssxx:common-crypto:${version}'

1. Crypto интерфейс

Этот модуль определяет основной интерфейс 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Интерфейс реализует шифрование, дешифрование с помощью симметричного, асимметричного методов и дайджеста. Развернуть Свернуть
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/xxssyyyyssxx-common-crypto.git
git@api.gitlife.ru:oschina-mirror/xxssyyyyssxx-common-crypto.git
oschina-mirror
xxssyyyyssxx-common-crypto
xxssyyyyssxx-common-crypto
master