Java原生方法实现 AES 算法示例

网友投稿 321 2023-01-12


Java原生方法实现 AES 算法示例

本文实例讲述了java原生方法实现 AES 算法。分享给大家供大家参考,具体如下:

AES(Advanced Encryption Standard)高级加密标准,在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准 。 这个标准用来替代原先的 DES ,已经被多方分析且广为全世界所使用 。 现已成为对称密钥加密中最流行的算法之一 。

/**

* AES 算法

*

* 算法采用加密模式:CBC;数据块:128;填充:PKCS5Padding

*

* 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 AESExcepradUwicwytion("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=="));

}

}

http://

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

文字在线加密解密工具(包含AES、DES、RC4等):

http://tools.jb51.net/password/txt_encode

MD5在线加密工具:

http://tools.jb51.net/password/CreateMD5Password

在线散列/哈希算法加密工具:

http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:

http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:

http://tools.jb51.net/password/sha_encode

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口测试用例编写原则(接口测试用例编写原则有哪些)
下一篇:微服务网关是否必须(微服务统一网关)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~