一、常用的加密/解密算法
1.Base64
严格来说,Base64不是一种加密/解密算法,而是一种编码方式,多用于解决中文乱码中。
常用场景:对文件、URL等进行Base64编码,以字符串方式发送给对方;对方在进行解码。
2.AES
AES是目前用的比较广泛的一种加密/解密算法。先来一段代码
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的话,很难解密出来。