public class AESUtils {
public static final String AES = "AES";
// 盐
public static final String SALT = "_10001_";
public static String getPassword(String password) {
//生成秘钥
try {
KeyGenerator kg = KeyGenerator.getInstance(AES);
// kg.init(128);//要生成多少位,只需要修改这里即可128, 192或256
//SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以生成的秘钥就一样。
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed((SALT + password + SALT).getBytes());
kg.init(128, random);
SecretKey sk = kg.generateKey();
byte[] b = sk.getEncoded();
return Base64.encodeToString(b);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
public static String getIV() {
// 生成偏移量
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecureRandom sha1PRNG = SecureRandom.getInstance("SHA1PRNG");
byte[] iv = new byte[cipher.getBlockSize()];
sha1PRNG.nextBytes(iv);
IvParameterSpec ivParams = new IvParameterSpec(iv);
return Base64.encodeToString(ivParams.getIV());
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 解密工具直接放进去即可
*/
public static String decryptS5(String sSrc, String sKey, String ivParameter) {
try {
byte[] raw = Base64.decode(sKey);
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
IvParameterSpec iv = new IvParameterSpec(Base64.decode(ivParameter));
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] myendicod = Base64.decode(sSrc);
byte[] original = cipher.doFinal(myendicod);
return new String(original);
} catch (Exception ex) {
return null;
}
}
/**
* 解密工具直接放进去即可
*/
public static String encryptS5(String sSrc, String sKey, String ivParameter) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec skeySpec = new SecretKeySpec(Base64.decode(sKey), "AES");
IvParameterSpec iv = new IvParameterSpec(Base64.decode(ivParameter));//使用CBC模式,需要一个向量iv,可增加加密算法的强度
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(sSrc.getBytes());
return Base64.encodeToString(encrypted);//此处使用BASE64做转码。
} catch (Exception ex) {
ex.printStackTrace();
return "";
}
}
}
AES加密java版本
最新推荐文章于 2024-08-30 11:27:10 发布