对称加密:加密和解密的过程使用的是相同的密钥

非对称加密
与对称加密不同,非对称加密算法的加密和解密使用不同的两个密钥.这两个密钥就是我们经常听到的”公开密钥”(公钥)和”私有密钥”(私钥).
公钥和私钥的关系是:
公钥和私钥一般都是成对出现,
如果你的消息使用公钥加密,那么需要该公钥对应的私钥才能解密;
如果你的消息使用私钥加密,那么需要该私钥对应的公钥才能解密.

java实现非对称加密
1 public static void main(String[] args) throws Exception { 2 //原文 3 String txt = "abc"; 4 System.out.println("需要加密的原始数据"+txt); 5 6 System.out.println(); 7 8 //获得密钥对Map 9 Map<String, byte[]> keyMap = getKeyMap(); 10 //获得公钥 11 String publicKeyStr = encryptBASE64(keyMap.get(PUBLIC_KEY)); 12 System.out.println("公钥\n\r"+publicKeyStr); 13 14 //获得密钥 15 String privateKeyStr = encryptBASE64(keyMap.get(PRIVATE_KEY)); 16 System.out.println("私钥\n\r"+privateKeyStr); 17 18 //将私钥规范 19 PrivateKey privateKey = restorePrivateKey(decryptBASE64(privateKeyStr)); 20 21 //将原文更利于私钥加密 22 byte[] encodedText = RSAEncode(privateKey, txt.getBytes("UTF-8")); 23 24 //私钥加密后的数据 25 String privateResult = byteArrayToHexString(encodedText); 26 System.out.println("加密后的256位数据\n\r"+privateResult); 27 28 PublicKey publicKey = restorePublicKey(decryptBASE64(publicKeyStr)); 29 // 公钥解密 30 System.out.println("公钥解密: " + RSADecode(publicKey, hexStringToByte(privateResult))); 31 }
运行结果图

具体的代码
https://github.com/liaobaoxin/password/blob/master/src/com/lbx/password/Cryptology.java