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