3 Star 24 Fork 10

xxssyyyyssxx/common-crypto

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

加密解密模块(crypto)

项目已经发布至 jcentermavenCentral (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...)。感谢Looly提供的各种算法实现。

/**
 * 加密解密接口,对于MD5,SHA1等摘要算法解密方法直接抛出异常.
 * 如果遇到结果或者入参是byte字节数组类型的,默认就转换为16进制的字符串,为了好统一使用String来表达
 * 加密解密其实更好的是针对byte[]其变种就是inputStream和outputStream,字符串类型的只是一层封装
 * @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[] encrypted = decrypt(bytes);
            out.write(encrypted);
        } 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);
    }
}

空文件

简介

encrypt,decrypt interface implements by symmetric,asymmetric,digester 展开 收起
Java
取消

发行版 (1)

全部

common-crypto 开源评估指数

productivity 生产力
niche_creation 创新力
robustness 稳健性
collaboration 协作
contributor 贡献者
software 软件

贡献者 (1)

全部

近期动态

接近4年前推送了新的 v1.8.1 标签
接近4年前推送了新的 1.8.1 分支
接近4年前推送了新的提交到 master 分支,d53cc9c...01e4b3b
4年多前评论了仓库
4年多前评论了仓库
加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/xxssyyyyssxx/common-crypto.git
git@gitee.com:xxssyyyyssxx/common-crypto.git
xxssyyyyssxx
common-crypto
common-crypto
master

搜索帮助

371d5123 14472233 46e8bd33 14472233