正常来将加密基本上永远都要伴随着解密,所谓的加密或者解密,往往都需要有一些规则,在JDK1.8开始,提供有新的加密处理操作类,Base64处理类
--Base64类
在该类之中存在两个内部类:Base64.Base64.Decoder以及Base64.enBase64.Encoder,分别进行加密和解密处理
进行加密处理:byte[] decode(byte[] src)
进行解密处理:byte[] encode(byte[] src)
--范例:进行数据加密示例
1 public class MyBase64 { 2 public static void main(String[] args) { 3 String message = "你好,这是一条消息"; //要发送的消息内容 4 Base64.getEncoder().encode(message.getBytes()); //数据加密 5 System.out.println(new String(Base64.getEncoder().encode(message.getBytes()))); 6 } 7 }
--运行结果
5L2g5aW9LOi/meaYr+S4gOadoea2iOaBrw== Process finished with exit code 0
--进行解密操作
public class MyBase64 { public static void main(String[] args) { String message = "你好,这是一条消息"; //要发送的消息内容 String encoder = new String(Base64.getEncoder().encode(message.getBytes()));//数据加密 String decode = new String(Base64.getDecoder().decode(encoder)); System.out.println(decode); } }
--我们知道Base64是一个公版的加密和解密算法,所以直接使用Base64进行数据的加密和解密并不安全,所以最好的做法是使用盐值操作,所谓盐值操作就是在所需要加密的字符串信息中追加一个盐值
1 public class MyBase64 { 2 public static void main(String[] args) { 3 String salt = "dnsaojnui"; //无序输入的盐值 4 String message = "你好,这是一条消息" + "{" + salt + "}"; //要发送的消息内容 5 String encoder = new String(Base64.getEncoder().encode(message.getBytes()));//数据加密 6 String decode = new String(Base64.getDecoder().decode(encoder)); 7 System.out.println(decode); 8 } 9 }
--但是盐值任然是明文规定的,这样实际效果也并不是很好,最好的做法则是多次加密
1 package 常用类库.base64加密与解密; 2 3 4 import java.util.Base64; 5 6 /** 7 * @author : S K Y 8 * @version :0.0.1 9 */ 10 class BaseUtil { //加密的盐值与此处对外不公布 11 private static final String SALT = "dasjidnas"; //公版的盐值 12 private static final int REPEAT = 5; ///加密的次数 13 14 /** 15 * 加密处理 16 * 17 * @param password 要加密的字符串密码数据,需要与盐值配合 18 * @return 加密后的数据 19 */ 20 public static String encode(String password) { 21 password = password + "{" + SALT + "}"; 22 byte[] bytes = password.getBytes(); 23 for (int i = 0; i < REPEAT; i++) { 24 bytes = Base64.getEncoder().encode(bytes); 25 } 26 return new String(bytes); 27 } 28 29 /** 30 * 解密 31 * 32 * @param needDecode 需要解密的数据 33 * @return 解密的结果 34 */ 35 public static String decode(String needDecode) { 36 byte[] bytes = needDecode.getBytes(); 37 for (int i = 0; i < REPEAT; i++) { 38 bytes = Base64.getDecoder().decode(bytes); 39 } 40 return new String(bytes).replaceAll("\\{\\w+}", ""); 41 } 42 } 43 44 public class MyBase64 { 45 public static void main(String[] args) { 46 String password = "qwer123456"; 47 String encode = BaseUtil.encode(password); 48 System.out.println(encode); 49 System.out.println(BaseUtil.decode(encode)); 50 } 51 }
--运行结果
VjFSR2IyRXlTa2hVYmtaVFYwZDRUMXBYZUVabFJsSjBUbFJDYUUxWGVGcFdSelZIWVVaWmVGTnFSbGhXYldoUVZERkZPVkJSUFQwPQ== qwer123456 Process finished with exit code 0
--此外,最好的方法是使用2-3中加密算法,同时得到一些完全不可解密的加密结果