1、經常使用的加密/解密算法 算法
1.Base64 ide
嚴格來講,Base64不是一種加密/解密算法,而是一種編碼方式,多用於解決中文亂碼中。 編碼
經常使用場景:對文件、URL等進行Base64編碼,以字符串方式發送給對方;對方在進行解碼。 加密
2.AES code
AES是目前用的比較普遍的一種加密/解密算法。先來一段代碼 ip
public class AESUtil { @Value("${aes.key}") String key; byte[] iv = { 0x31, 0x35, 0x36, 0x33, 0x34, 0x33, 0x32, 0x31, 0x37, 0x37, 0x39, 0x35, 0x34, 0x33, 0x30, 0x31 }; public String encrypt(String content) { try { Security.addProvider(new BouncyCastleProvider()); Key secretKeySpec = new SecretKeySpec(key.getBytes(), "AES"); Cipher in = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");//算法/模式/補碼方式 in.init(Cipher.ENCRYPT_MODE, secretKeySpec, new IvParameterSpec(iv));//使用CBC模式,須要一個向量iv,可增長加密算法的強度 byte[] enc = in.doFinal(content.getBytes()); return new String(Hex.encode(enc)); } catch (Exception e) { log.error("加密遇到異常",e); throw new RuntimeException(e); } } public String decrypt(String encryptContent){ try { Security.addProvider(new BouncyCastleProvider()); Key secretKeySpec = new SecretKeySpec(key.getBytes(), "AES"); byte[] enc = Hex.decode(encryptContent.getBytes()); Cipher out = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");//算法/模式/補碼方式 out.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(iv));//使用CBC模式,須要一個向量iv,可增長加密算法的強度 byte[] dec = out.doFinal(enc); return new String(dec); }catch (Exception e){ log.error("解密遇到異常",e); throw new RuntimeException(e); } } }
由上面的代碼可知,加密所須要的參數有:content(須要被加密的字符串)、key(加密須要的密碼)。 字符串
key是本身設置的,因此對content加密後,若是不知道key的話,很難解密出來。 get