前端进行参数传递的时候 ,有些数据为了安全起见还是需要加密传输的,比如用户密码,比如登录的时候,注册的时候,用户输入的密码,如果明文进行传输还是不太安全的,所以一般可以进行加密后传递到后端。
那么就有这几个问题:
·前端如何进行加密
·后端如何进行解密
·用什么加密算法
一般是用3DES的加密解密方式
前端引用3DES加密库,对数据进行加密,然后传输到后端,后端通过3DES进行解密操作就可以了。
后端java代码如下:加密、解密:
代码中的 SECRECY_KEY 就是 我们用到的加密密钥。你可以改成你自己的。我这里是3DES加密,用到24位的加密密钥。
public final static String SECRECY_KEY = "123456789987654321123456"; // 24位
java
package com.xxx.utils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Date;
/**
* 3DES加密解密工具类
*/
public class ThreeDESUtils {
private final static Logger logger = LoggerFactory.getLogger(ThreeDESUtils.class);
/**
* 加解密统一编码方式
*/
private final static String ENCODING = "utf-8";
/**
* 加解密方式
*/
private final static String ALGORITHM = "DESede";
/**
*加密模式及填充方式
*/
private final static String PATTERN = "DESede/CBC/PKCS5Padding";
public final static String SECRECY_KEY = "123456789987654321123456"; // 24位
/**
* 数据加密
* @param message 待加密的数据
* @param ivHex 加密偏移量设置
* @return
* @throws Exception
*/
public static String encrypt(String message, String ivHex) throws Exception {
if(StringUtils.isBlank(ivHex)){
ivHex = DateUtils.formatDate(new Date(),"yyyyMMdd");
}
final SecretKey key = new SecretKeySpec(SECRECY_KEY.getBytes("utf-8"), ALGORITHM);
final IvParameterSpec iv = new IvParameterSpec(ivHex.getBytes("utf-8"));
final Cipher cipher = Cipher.getInstance(PATTERN);
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
final byte[] plainTextBytes = message.getBytes("utf-8");
final byte[] cipherText = cipher.doFinal(plainTextBytes);
return new sun.misc.BASE64Encoder().encode(cipherText);
}
/**
* 3DES数据解密
* @param message 待解密的数据。这个数据已经进行了一次Base64加密
* @param ivHex 加密偏移量设置
* @return
* @throws Exception
*/
public static String decrypt(String message, String ivHex) throws Exception {
if(StringUtils.isBlank(ivHex)){
ivHex = DateUtils.formatDate(new Date(),"yyyyMMdd");
}
final SecretKey key = new SecretKeySpec(SECRECY_KEY.getBytes("utf-8"), ALGORITHM);
final IvParameterSpec iv = new IvParameterSpec(ivHex.getBytes("utf-8"));
final Cipher decipher = Cipher.getInstance(PATTERN);
decipher.init(Cipher.DECRYPT_MODE, key, iv);
final byte[] plainText = decipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(message));
return new String(plainText, "UTF-8");
}
}