import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* 根据序列号加密生产4*4的密码
*/
public class EncryptionAndDecryption {
// 私钥
private static String salt = "1234123412341234";
/**
* 加密
*
* @param encryptMessage 需要加密的信息
* @return
* @throws Exception
*/
public static String encrypt(String encryptMessage) throws Exception {
// 两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES
SecretKeySpec key = new SecretKeySpec(salt.getBytes(), "AES");
// 实例化加密类,参数为加密方式,要写全
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
// 初始化加密
cipher.init(Cipher.ENCRYPT_MODE, key);
// 加密操作,返回加密后的字节数组
byte[] bytes = cipher.doFinal(encryptMessage.getBytes());
String tempResult = Base64.encodeBase64String(bytes);
// 正则取出字母数字
String result = tempResult.replaceAll("[^(a-zA-Z0-9)]", "");
StringBuilder sql = new StringBuilder("");
// 每4位拼接一次
for (int i = 0; i < 16; i = i + 4) {
sql.append(result.substring(i, i + 4).toUpperCase());
sql.append("-");
}
String substring = sql.substring(0, sql.length() - 1);
return substring;
}
// 测试
public static void main(String[] args) throws Exception {
String serialNumber = "123456789";
String encrypt = encrypt(serialNumber);
System.out.println("加密后信息encrypt:" + encrypt);
}
}