对称加密:加密和解密的过程使用的是相同的密钥
非对称加密
与对称加密不同,非对称加密算法的加密和解密使用不同的两个密钥.这两个密钥就是我们经常听到的”公开密钥”(公钥)和”私有密钥”(私钥).
公钥和私钥的关系是:
公钥和私钥一般都是成对出现,
如果你的消息使用公钥加密,那么需要该公钥对应的私钥才能解密;
如果你的消息使用私钥加密,那么需要该私钥对应的公钥才能解密.
java实现非对称加密
public static void main(String[] args) throws Exception { //原文 String txt = "abc"; System.out.println("需要加密的原始数据"+txt); System.out.println(); //获得密钥对Map Map<String, byte[]> keyMap = getKeyMap(); //获得公钥 String publicKeyStr = encryptBASE64(keyMap.get(PUBLIC_KEY)); System.out.println("公钥\n\r"+publicKeyStr); //获得密钥 String privateKeyStr = encryptBASE64(keyMap.get(PRIVATE_KEY)); System.out.println("私钥\n\r"+privateKeyStr); //将私钥规范 PrivateKey privateKey = restorePrivateKey(decryptBASE64(privateKeyStr)); //将原文更利于私钥加密 byte[] encodedText = RSAEncode(privateKey, txt.getBytes("UTF-8")); //私钥加密后的数据 String privateResult = byteArrayToHexString(encodedText); System.out.println("加密后的256位数据\n\r"+privateResult); PublicKey publicKey = restorePublicKey(decryptBASE64(publicKeyStr)); // 公钥解密 System.out.println("公钥解密: " + RSADecode(publicKey, hexStringToByte(privateResult))); }
运行结果图
具体的代码
https://github.com/liaobaoxin/password/blob/master/src/com/lbx/password/Cryptology.java
来源:https://www.cnblogs.com/aotemanzhifu/p/9192369.html