大家好,欢迎来到IT知识分享网。
AES介绍
AES即高级加密标准(Advanced Encryption Standard)的缩写,是一种区块加密标准。
AES算法比DES算法更加安全,DES使用56位密钥,比较容易被激活成功教程,而AES可以使用128、192、和256位密钥,并且分组加密和解密数据,更加安全可靠。
AES工具类源码
public class AesUtils {
private static final String CHAR_ENCODING = "UTF-8";
private static final String ECB_AES_ALGORITHM = "AES/ECB/PKCS5Padding";
private static final String CBC_AES_ALGORITHM = "AES/CBC/PKCS5Padding";
private static final String AES = "AES";
public static final int IV_LEN = 16;
/**
* 加密
*/
public static String encrypt(String data, String key) {
try {
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(CHAR_ENCODING), AES);
Cipher cipher = Cipher.getInstance(ECB_AES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encrypted = cipher.doFinal(data.getBytes(CHAR_ENCODING));
return getBase64Str(encrypted);
} catch (Exception e) {
throw new RuntimeException("encrypt fail!", e);
}
}
/**
* CBC模式加密
*/
public static String encryptCBC(String data, String key) {
try {
SecretKeySpec secKey = new SecretKeySpec(key.getBytes(CHAR_ENCODING), AES);
Cipher cipher = Cipher.getInstance(CBC_AES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secKey, getIvByKey(key));
byte[] encrypted = cipher.doFinal(data.getBytes(CHAR_ENCODING));
return getBase64Str(encrypted);
} catch (Exception e) {
throw new RuntimeException("encryptCBC fail!", e);
}
}
/**
* 解密
*/
public static String decrypt(String data, String key) {
try {
SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(CHAR_ENCODING), AES);
Cipher cipher = Cipher.getInstance(ECB_AES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] result = cipher.doFinal(Base64.getDecoder().decode(data));
return new String(result, CHAR_ENCODING);
} catch (Exception e) {
throw new RuntimeException("decrypt fail!", e);
}
}
/**
* CBC模式解密
*/
public static String decryptCBC(String data, String key) {
try {
SecretKeySpec secKey = new SecretKeySpec(key.getBytes(CHAR_ENCODING), AES);
Cipher cipher = Cipher.getInstance(CBC_AES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secKey, getIvByKey(key));
byte[] original = cipher.doFinal(Base64.getDecoder().decode(data));
return new String(original, CHAR_ENCODING);
} catch (Exception e) {
throw new RuntimeException("decryptCBC fail!", e);
}
}
private static IvParameterSpec getIvByKey(String key) throws UnsupportedEncodingException {
byte[] iv = new byte[IV_LEN];
System.arraycopy(key.getBytes(CHAR_ENCODING), 0, iv, 0, IV_LEN);
return new IvParameterSpec(iv);
}
public static String getBase64Str(byte[] encrypted) throws UnsupportedEncodingException {
byte[] enc64 = Base64.getEncoder().encode(encrypted);
return new String(enc64, CHAR_ENCODING);
}
}
工具类的使用
public static final String secret32 = "YH9H41tA9StPDSklnk9ioe7aj80DugOj";
public static final String SOURCE = "sdljflksdj";
@Test
public void cbc() throws Exception {
//16,24,32长度都能成功加解密
String secret = secret32.substring(0,16);
String hello_world = AesUtils.encryptCBC(SOURCE, secret);
String decrypt = AesUtils.decryptCBC(hello_world, secret);
}
@Test
public void testAesUtils() throws Exception {
//16,24,32长度都能成功加解密
String secret = secret32.substring(0,24);
String hello_world = AesUtils.encrypt(SOURCE, secret);
String decrypt = AesUtils.decrypt(hello_world, secret);
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/62928.html