与移动端进行交换的时候经常遇到需要加密、解密的情况,最近在给移动端做接口,就研究了下加解密,把两种方式汇总一下:
1、des加密、解密
(1)des加解密工具类
DesUtil:
package com.loan.fore.util;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
*
* <b>描述:</b> DES加解密
* <br><b>作者:</b>
* <br><b>版本:</b>1.0
* <br><b>ProjectName:</b> loan-utils
* <br><b>PackageName:</b> com.loan.fore.util
* <br><b>ClassName:</b> DesUtil
* <br><b>Date:</b> 2017年8月3日 下午2:10:40
*/
public class DesUtil {
private static byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
public static final String KEY = "cf410f84";
public static String encryptDES(String encryptString) throws Exception {
IvParameterSpec zeroIv = new IvParameterSpec(iv);
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
return Base64.encode(encryptedData);
}
public static String decryptDES(String decryptString)
throws Exception {
byte[] byteMi = Base64.decode(decryptString);
IvParameterSpec zeroIv = new IvParameterSpec(iv);
SecretKeySpec key = new SecretKeySpec(KEY.getBytes(), "DES");
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
byte decryptedData[] = cipher.doFinal(byteMi);
return new String(decryptedData);
}
public static void main(String[] args) throws Exception {
String encryptDES = encryptDES("abc");
System.out.println(encryptDES);
String decryptDES = decryptDES("MpWN08fvUgw=");
System.out.println(decryptDES);
}
}
/**
*
*/
package com.loan.fore.util;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
/**
* <b>描述:</b>
* <br><b>作者:</b>
* <br><b>版本:</b>1.0
* <br><b>ProjectName:</b> loan-utils
* <br><b>PackageName:</b> com.loan.fore.util
* <br><b>ClassName:</b> Base64
* <br><b>Date:</b> 2017年8月3日 下午5:44:10
*/
public class Base64 {
private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
.toCharArray();
/**
* data[]进行编码
*
* @param data
* @return
*/
public static String encode(byte[] data) {
int start = 0;
int len = data.length;
StringBuffer buf = new StringBuffer(data.length * 3 / 2);
int end = len - 3;
int i = start;
int n = 0;
while (i <= end) {
int d = ((((int) data[i]) & 0x0ff) << 16)
| ((((int) data[i + 1]) & 0x0ff) << 8)
| (((int) data[i + 2]) & 0x0ff);
buf.append(legalChars[(d >> 18) & 63]);
buf.append(legalChars[(d >> 12) & 63]);
buf.append(legalChars[(d >> 6) & 63]);
buf.append(legalChars[d