對稱加密:加密和解密的過程使用的是相同的密鑰
非對稱加密
與對稱加密不同,非對稱加密算法的加密和解密使用不同的兩個密鑰.這兩個密鑰就是我們經常聽到的”公開密鑰”(公鑰)和”私有密鑰”(私鑰).
公鑰和私鑰的關係是:
公鑰和私鑰一般都是成對出現,
如果你的消息使用公鑰加密,那麼需要該公鑰對應的私鑰才能解密;
如果你的消息使用私鑰加密,那麼需要該私鑰對應的公鑰才能解密.
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