其他分享
首页 > 其他分享> > Hutool加密解密的使用

Hutool加密解密的使用

作者:互联网

说明

POM

使用Hutool加密解密工具时,引入如下依赖

 复制代码 隐藏代码
 复制代码 隐藏代码

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-crypto</artifactId>
    <version>5.7.15</version>
</dependency>

对称加密与非对称加密

对称加密

加密算法

加密模式

填充模式

当需要按块处理的数据, 数据长度不符合块处理需求时, 按照一定的方法填充满块长的规则

Tips:默认情况下, 加密模式和填充模式为:ECB/PKCS5Padding。如果使用CBC模式,需要增加参数初始化向量IV

DESAES示例代码

 复制代码 隐藏代码
 复制代码 隐藏代码

public class SymmetricCryptoTest {
    @Test
    public void des() {
        String text = "HelloWorld";
 
        // key:DES模式下,key必须为8位
        String key = "12345678";
        // iv:偏移量,ECB模式不需要,CBC模式下必须为8位
        String iv = "12345678";
 
        // DES des = new DES(Mode.ECB, Padding.PKCS5Padding, key.getBytes());
        DES des = new DES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
 
        String encrypt = des.encryptBase64(text);
        System.out.println(encrypt);
 
        String decrypt = des.decryptStr(encrypt);
        System.out.println(decrypt);
    }
 
    @Test
    public void aes() {
        String text = "HelloWorld";
 
        // key:AES模式下,key必须为16位
        String key = "1234567812345678";
        // iv:偏移量,ECB模式不需要,CBC模式下必须为16位
        String iv = "1234567812345678";
 
        // AES aes = new AES(Mode.ECB, Padding.PKCS5Padding, key.getBytes());
        AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
 
        // 加密并进行Base转码
        String encrypt = aes.encryptBase64(text);
        System.out.println(encrypt);
 
        // 解密为字符串
        String decrypt = aes.decryptStr(encrypt);
        System.out.println(decrypt);
    }
}

 

 

非对称加密

简介

RSA示例

 复制代码 隐藏代码
 复制代码 隐藏代码

public class AsymmetricCryptoTest {
    /**
     * 私钥和公钥
     */
    private static String privateKey;
    private static String publicKey;
 
    private static String encryptByPublic;
 
    /**
     * 生成公私钥
     */
    @BeforeAll
    public static void genKey() {
        KeyPair pair = SecureUtil.generateKeyPair("RSA");
        privateKey = Base64.encode(pair.getPrivate().getEncoded());
        System.out.println("私钥\t" + privateKey);
        publicKey = Base64.encode(pair.getPublic().getEncoded());
        System.out.println("公钥\t" + publicKey);
    }
 
    @Test
    public void test() {
        String text = "HelloWorld";
 
        // 初始化对象
        // 第一个参数为加密算法,不传默认为 RSA/ECB/PKCS1Padding
        // 第二个参数为私钥(Base64字符串)
        // 第三个参数为公钥(Base64字符串)
        RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue(), privateKey, publicKey);
 
        // 公钥加密,私钥解密
        String encryptByPublic = rsa.encryptBase64(text, KeyType.PublicKey);
        System.out.println("公钥加密\t" + encryptByPublic);
        String decryptByPrivate = rsa.decryptStr(encryptByPublic, KeyType.PrivateKey);
        System.out.println("私钥解密\t" + decryptByPrivate);
 
        // 私钥加密,公钥解密
        String encryptByPrivate = rsa.encryptBase64(text, KeyType.PrivateKey);
        System.out.println("私钥加密\t" + encryptByPrivate);
        String decryptByPublic = rsa.decryptStr(encryptByPrivate, KeyType.PublicKey);
        System.out.println("公钥解密\t" + decryptByPublic);
 
        // 此处赋值为下一个测试用
        AsymmetricCryptoTest.encryptByPublic = encryptByPublic;
    }
 
    /**
     * 仅使用私钥解密公钥加密后的密文
     */
    @Test
    public void test2() {
        // 传入私钥以及对应的算法
        RSA rsa = new RSA(AsymmetricAlgorithm.RSA_ECB_PKCS1.getValue(), privateKey, null);
 
        // 私钥解密公钥加密后的密文
        String decrypt = rsa.decryptStr(encryptByPublic, KeyType.PrivateKey);
        System.out.println(decrypt);
    }
}

 

摘要加密

简介

MD5SHA-1示例

 复制代码 隐藏代码
 复制代码 隐藏代码

public class DigesterTest {
    @Test
    public void md5() {
        String text = "HelloWorld";
 
        // 第一种:创建Digester对象,执行加密
        Digester md5 = new Digester(DigestAlgorithm.MD5);
        String digestHex = md5.digestHex(text);
        System.out.println(digestHex);
 
        // 第二种:执行使用DigestUtil
        String md5Hex = DigestUtil.md5Hex(text);
        System.out.println(md5Hex);
    }
 
    @Test
    public void sha1() {
        String text = "HelloWorld";
 
        // 第一种:创建Digester对象,执行加密
        Digester md5 = new Digester(DigestAlgorithm.SHA1);
        String digestHex = md5.digestHex(text);
        System.out.println(digestHex);
 
        // 第二种:执行使用DigestUtil
        String md5Hex = DigestUtil.sha1Hex(text);
        System.out.println(md5Hex);
    }
}

 

 

标签:加密,String,text,System,Hutool,解密,println,out
来源: https://www.cnblogs.com/yongyuankuaile/p/16107839.html