引言
数据库密码我们一般会直接写在配置中,这对运维安全来说,是一个很大的挑战。那么就很有必要对我们配置的数据库密码进行加密,配置密文的方式,怎么都比密码要安全一些吧!
当然这只是密码使用场景中微不足道的例子,还有很多……
RSAUtil
顾名思义,就是RSA非对称加密工具类。你可以通过此工具类来实现密码的加密和解密工作。下面我们来根据API文档演示一下,具体如何使用。
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中加入下面仓库地址
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
2、再在pom.xml中添加JavaLib库依赖
<dependency>
<groupId>com.github.fengwenyi</groupId>
<artifactId>JavaLib</artifactId>
<version>171224.17</version>
</dependency>
如果没有报错,那么就依赖成功了
如果你按照我说的方法,还是报错的话,这……