这篇文章给大家介绍使用Java怎么实现一个AES 算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
AES(Advanced Encryption Standard)高级加密标准,在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准 。 这个标准用来替代原先的 DES ,已经被多方分析且广为全世界所使用 。 现已成为对称密钥加密中最流行的算法之一 。
/**
* AES 算法
* <p/>
* 算法采用加密模式:CBC;数据块:128;填充:PKCS5Padding
* <p/>
* key 与向量字符串的长度为 16 位
*
* @author Deniro Li (lisq037@163.com)
* 2018/3/17
*/
public class AES {
/**
* 算法名称
*/
public static final String NAME = "AES";
/**
* 加密模式:CBC;数据块:128;填充:PKCS5Padding
*/
public final String MODE = "AES/CBC/PKCS5Padding";
/**
* KEY 与 向量字符串的长度
*/
public static final int LENGTH = 16;
/**
* 加密用的 KEY
*/
private String key;
/**
* 向量,用于增加加密强度
*/
private String ivParameter;
/**
* @param key 加密用的 KEY
* @param ivParameter 偏移量
*/
public AES(String key, String ivParameter) {
if (key == null || key.length() != LENGTH) {
throw new AESException("KEY 不存在,或者长度不为 " + LENGTH);
}
if (ivParameter == null || ivParameter.length() != LENGTH) {
throw new AESException("ivParameter 不存在,或者长度不为 " + LENGTH);
}
this.key = key;
this.ivParameter = ivParameter;
}
/**
* 加密
*
* @param s 要加密的字符串
* @return 加密后的字符串
*/
public String encode(String s) {
String result;
try {
Cipher cipher = Cipher.getInstance(MODE);
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), NAME), iv);
byte[] bytes = cipher.doFinal(s.getBytes(ENCODING));
result = new BASE64Encoder().encode(bytes);
} catch (Exception e) {
throw new AESException("加密", e);
}
return result;
}
/**
* 解密
*
* @param s 待解密的字符串
* @return 解密后的字符串
*/
public String decode(String s) {
try {
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes("ASCII"), NAME);
Cipher cipher = Cipher.getInstance(MODE);
IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
return new String(cipher.doFinal(new BASE64Decoder().decodeBuffer(s)), ENCODING);
} catch (Exception e) {
throw new AESException("解密", e);
}
}
}
单元测试:
public class AESTest {
AES aes;
@Before
public void init(){
aes=new AES("12345abcdef67890","1234567890abcdef");
}
@Test
public void testEncode() throws Exception {
Assert.assertEquals("jANei3LBvnLCaZ2XddWHZw==", aes.encode("123456"));
}
@Test
public void testDecode() throws Exception {
Assert.assertEquals("123456", aes.decode("jANei3LBvnLCaZ2XddWHZw=="));
}
}
关于使用Java怎么实现一个AES 算法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。