背景
前段时间在跟后台联调敏感数据的加密和解密时遇到了一些问题,设备使用的是android平台提供的des加密方式,后台使用的javax提供的des加密方式和PHP提供加密方式,在对接过程中就出现了同一段字符,在前后端解密得到的字符串不一样,最后经过一段时间的调试,得到了结果一致的实现方式,下面记录下来。
实现平台
java平台
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.util.Base64;
public class DESUtil {
private static final String KEY = "test";
private static final String DES = "DES";
private static final String DES_P = "DES/ECB/PKCS5Padding";
private static final String CHARSET = "UTF-8";
/**
* 进行DES加密
*
* @param string String 需要加密的字符串
* @return String 加密字符串
*/
public static String encryptByDes(String string) {
return encryptByDes(string, KEY);
}
/**
* DES 解密
*
* @param string String 加密串
* @return String 明文
*/
public static String decryptByDes(String string) {
return decryptByDes(string, KEY);
}
/**
* 进行DES加密
*
* @param string
* @param key
* @return
*/
private static String encryptByDes(String string, String key) {
try {
if (string != null && string.length() > 0) {
byte[] tmpOriginalStr = string.getBytes(CHARSET);
// 创建一个密匙工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
// 创建一个DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key.getBytes());
// 将DESKeySpec对象转换成SecretKey对象
SecretKey secretKey