先说AES,看代码:
public static byte[] doEncrypt(byte[] key, byte[] initialVector, byte[] text) {
try {
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"
IvParameterSpec iv = new IvParameterSpec(initialVector);//使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv);
byte[] encrypted = cipher.doFinal(text);
return encrypted;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static byte[] doEncryptByRandom(int length, byte[] key, byte[] initialVector, byte[] text) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(key);
kgen.init(length, secureRandom);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
//return doEncrypt(enCodeFormat, initialVector, text);
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"
if (initialVector==null){
initialVector = new byte[length/8];
}else if (initialVector.length*8!=length){
byte[] tmp = new byte[length/8];
if (tmp.length>initialVector.length){
System.arraycopy(initialVector, 0, tmp, 0, initialVector.length);
}else{
System.arraycopy(initialVector, 0, tmp, 0, tmp.length);
}
initialVector = tmp;
}
IvParameterSpec iv = new IvParameterSpec(initialVector);//使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv);
byte[] encrypted = cipher.doFinal(text);
return encrypted;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static byte[] doEnc