Cifrado y descifrado Base64
Normalmente, la encriptación siempre va acompañada básicamente de desencriptación, la denominada encriptación o desencriptación a menudo requiere algunas reglas. Desde JDK1.8 se ha proporcionado un nuevo conjunto de clases de procesamiento de cifrado, procesamiento Base64. Hay dos clases internas en esta clase:
- Base64.Encoder: realiza el procesamiento de cifrado;
- codificación de byte [] público (byte [] src) Utilice el esquema de codificación Base64 para codificar todos los bytes en la matriz de bytes especificada en la matriz de bytes recién asignada
- Base64.Decoder: Realice el proceso de descifrado;
- decodificación de byte público [] (byte [] src): use el esquema de codificación Base64 para decodificar todos los bytes en la matriz de bytes de entrada y escriba el resultado en la matriz de bytes de salida recién asignada.
Ejemplo: implementar operaciones de cifrado y descifrado
package 开发支持类库;
import java.util.Base64;
public class Base64类 {
public static void main(String[] args) {
//加密
String msg = "加密内容"; //要发送的信息内容
//getEncoder()返回一个Base64编码方案,encode利用此方法进行加密
byte[] enMsg = Base64.getEncoder().encode(msg.getBytes()); //数据加密
String enString = new String(enMsg); //转换为String
System.out.println("加密后:"+enString);
//解密
byte[] deMsg = Base64.getDecoder().decode(enMsg); //解密,getDecoder()返回一个Base64编码方案,decode进行解密
String deString = new String(deMsg);
System.out.println("解密结果:"+deString);
}
}
Después del cifrado: vNPD3MTayN0 =
Resultado del descifrado: contenido cifrado
Aunque Base64 puede implementar el procesamiento de cifrado y descifrado, es una versión pública del algoritmo, por lo que a menudo no es seguro cifrar datos directamente, por lo que la mejor forma es utilizar la operación de sal .
String salt = "javaDemo"; //定义盐值
String msg = "加密内容"+"{"+salt+"}"; //加上了盐值,数据不只有加密内容
Incluso si el valor de la sal realmente encuentra que el efecto del cifrado no es muy bueno, la mejor manera es cifrar varias veces.
Ejemplo: operación de cifrado compleja
package 开发支持类库;
import java.util.Base64;
public class Base64类 {
public static void main(String[] args) {
//加密
String str =StringUtil.encode("加密内容") ;
System.out.println(str);
//解密
str = StringUtil.decode(str);
System.out.println(str);
}
}
class StringUtil{
private static final String SALT = "盐值"; //公共的盐值
private static final int RPEAT = 3; //加密次数
/**
* 加密处理
* @param str 要加密的字符串,需要与盐值整合
* @return 加密后的数据
*/
public static String encode(String str) { //加密处理
String temp = str +"{"+SALT+"}"; //盐值对外不公布
byte data[] = temp.getBytes(); //将字符串变为字节数组
for(int x = 0;x <RPEAT ;x++) {
data = Base64.getEncoder().encode(data); //重复加密
}
return new String(data); //字节数组转为字符串,返回加密结果
}
/**
* 解密处理
* @param str 解密的字符串
* @return 解密后的内容
*/
public static String decode(String str) {
byte data[] = str.getBytes();//将字符串变为字节数组
for(int x = 0;x <RPEAT ;x++) {
data = Base64.getDecoder().decode(data); //重复解密,之前加密多少次就解密多少次
}
return new String(data).replaceAll("\\{\\S+\\}", "");//S表示任何非空格的字符,将括号和里面所有内容替换成null,字节数组转为字符串,返回解密结果
}
}
ZGs1UVJETk5WR0Y1VGpFM01HTTNWM1JZTUQwPQ ==
contenido encriptado
Es mejor usar 2-3 programas de encriptación y encontrar algunos métodos de encriptación que no se puedan encriptar por completo.