JavaLib | RSAUtil非对称加密工具类

引言

数据库密码我们一般会直接写在配置中,这对运维安全来说,是一个很大的挑战。那么就很有必要对我们配置的数据库密码进行加密,配置密文的方式,怎么都比密码要安全一些吧!


JavaLib | RSAUtil非对称加密工具类_第1张图片
安全

当然这只是密码使用场景中微不足道的例子,还有很多……

RSAUtil

顾名思义,就是RSA非对称加密工具类。你可以通过此工具类来实现密码的加密和解密工作。下面我们来根据API文档演示一下,具体如何使用。

API

JavaLib | RSAUtil非对称加密工具类_第2张图片
RSAUtil API列表

获取密码我们提供了两个方法

getKey()
getKey(int keySize)

如果你没有特别的要求,可以直接使用无参数的方法。

私钥加密,公钥解密

privateKeyEncrypt(String key, String plainText)
publicKeyDecrypt(String key, String cipherText)

公钥加密,私钥解密

publicKeyEncrypt(String key, String plainText)
privateKeyDecrypt(String key, String cipherText)

演示

1、获取密钥

            String [] keys= RSAUtil.getKey();
            String privateKey = keys[0];
            String publicKey = keys[1];
            System.out.println("private key=>" + privateKey);
            System.out.println("public key=>" + publicKey);

结果

private key=>MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEAmts3Dyltmg9LcH7wIrrGvFIKei/3Pu9JlgFntysRZo8dJP1ESF9+O2fewLMbq6XF1tzvrHDB9Qs9p7H2BeI9YwIDAQABAkEAgCkTLWItCkbEOatk1GleFveTIkLWTmi9rv8ktixXr1dR4BTZjxYxNy/IO17xjNLEEHHexgCvEI5i/GZTecYuKQIhANZjwGH7ADK67eQUlw1VR8N1S0fMY0WTmm+IWqGWEXhlAiEAuOl3ZwPrGtysj1LDEXySq1FY3sW7jbwAxbBmSaHv7icCIQC5XD+et1zBf9tk4uSC86P7e7Nd3XpLUsYo/nSV1uE9/QIgBh9k3rpYfIk2BYDeCKQxTw7gfG/bp/PDqsgOev2rrh0CIQDCFH6+G7MBrHYTP3gfqykgasRQfAWo8WK1DjqvGY7Fwg==
public key=>MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJrbNw8pbZoPS3B+8CK6xrxSCnov9z7vSZYBZ7crEWaPHST9REhffjtn3sCzG6ulxdbc76xwwfULPaex9gXiPWMCAwEAAQ==

为了文档的简洁,后面用到时,会留空。

2、公钥加密

            String publicKey = ""; // 把刚刚生成的公钥复制到这里
            String pwd = "Ct.G6%2D"; // 使用在线随机密码生成器生成
            String password = RSAUtil.publicKeyEncrypt(publicKey, pwd);
            System.out.println("password=>" + password);

结果

password=>c51nH2avT3LRbOIA3+ovpCA1Xg4sA5v7tf39rCRljOCVbMJ4THTw8ec8gOpV+5QRfDvRA2biPr1VcShXgOMeYQ==

3、私钥解密

            String privateKey = ""; // 第一步生成的私钥复制到这里
            String password = ";  // 第二步生成的密文复制到这里
            String pwd = RSAUtil.privateKeyDecrypt(privateKey, password);
            System.out.println("pwd=>" + pwd);

结果

pwd=>Ct.G6%2D

显然这个密码和加密之前的是一样的

RSAUtil 测试代码

    // test RSA
    @Test
    public void testRSAUtil() {
        try {
            String [] keys = RSAUtil.getKey();

            String privateKey = keys[0];
            String publicKey = keys[1];

            System.out.println("密钥----------------------------");
            System.out.println("privateKey=>" + privateKey);
            System.out.println("publicKey=>" + publicKey);

            System.out.println("密码文本----------------------------");
            String pwd = "rPMstexg*^BFMSwf"; //由在线随机密码生成器生成
            System.out.println("pwd=>" + pwd);

            // 私钥加密、公钥解密
            String password1 = RSAUtil.privateKeyEncrypt(privateKey, pwd);
            String pwd1 = RSAUtil.publicKeyDecrypt(publicKey, password1);
            System.out.println("私钥加密、公钥解密----------------------------");
            System.out.println("password1=>" + password1);
            System.out.println("pwd1=>" + pwd1);

            // 公钥加密、私钥解密
            String password2 = RSAUtil.publicKeyEncrypt(publicKey, pwd);
            String pwd2 = RSAUtil.privateKeyDecrypt(privateKey, password2);
            System.out.println("公钥加密、私钥解密----------------------------");
            System.out.println("password2=>" + password2);
            System.out.println("pwd2=>" + pwd2);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }  catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        }


        /*
        测试结果:
        密钥----------------------------
        privateKey=>MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAmXOKJBqpaFf5Mhn+xZqVsAcGo/Fc6X7F+AbhHIQ4Rz6GdXu9+9vpKvbNt5BZ0xe6ky9XMQBMS3PiPhlbYq+9YwIDAQABAkBaU3GAORV5LzenbzfRt2HfQPN+s0eexhngGqSNtaKvBEtgX7DV/lpdhxaBCMcqPU62pIJOTuN7a7Ar7jnTXopBAiEA3B4EwssxH/8NMygNnLhf8ELGhr2SNumrDoulobhXnyECIQCyd2ddePdIvopQ61GoLI8oa7BZ/dFH8LD5EvHTXOzgAwIhAIxkeRTlFIgb3Qdr3ILA9i//5y+5abCsiPXWC+aB9SEBAiBCQ8+fh2DaI9WbwiRpu1HUglfSsknY2mf7s6sS/ff+HQIhAKGUw09WL+u7sKrnGwE4h7UASaMJbT1ZDBsYWN/vsvp8
        publicKey=>MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJlziiQaqWhX+TIZ/sWalbAHBqPxXOl+xfgG4RyEOEc+hnV7vfvb6Sr2zbeQWdMXupMvVzEATEtz4j4ZW2KvvWMCAwEAAQ==
        密码文本----------------------------
        pwd=>rPMstexg*^BFMSwf
        私钥加密、公钥解密----------------------------
        password1=>GrWq7dmWeH+22ZtObvNhMSTwVjC8IXytA5D58+AY3/Tty1u5/+mySeXy/tsi3yBeeXMfs+cZqqHaHe7fG90gwA==
        pwd1=>rPMstexg*^BFMSwf
        公钥加密、私钥解密----------------------------
        password2=>ST9HfIbwCCm7R4q3ai/w5EejGwPpNnB3s6LC82uUuqvqsE/R0IGgOjbzBUTafLNoabz5gUvPmdIBcHg0dN4n4w==
        pwd2=>rPMstexg*^BFMSwf
         */
    }

JavaLib库

如果你已被这个工具类吸引到了,那么来使用吧
https://github.com/fengwenyi/JavaLib

引入方法

1、在pom.xml中加入下面仓库地址

    
        
            jitpack.io
            https://jitpack.io
        
    

2、再在pom.xml中添加JavaLib库依赖

        
            com.github.fengwenyi
            JavaLib
            171224.17
        

如果没有报错,那么就依赖成功了

如果你按照我说的方法,还是报错的话,这……

你可能感兴趣的:(JavaLib | RSAUtil非对称加密工具类)