首页| 新闻| 娱乐| 游戏| 科普| 文学| 编程| 系统| 数据库| 建站| 学院| 产品| 网管| 维修| 办公| 热点
本文实例讲述了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程序设计有所帮助。
练就火眼金睛 十一种常见电脑
打印机共享提示“操作无法完成
如何查找有故障的配件
回眸一笑百魅生,六宫粉黛无颜色
岁月静美,剪一影烟雨江南
芜湖有个“松鼠小镇”
小满:小得盈满,一切刚刚好!
一串串晶莹剔透的葡萄,像一颗颗宝石挂在藤
正宗老北京脆皮烤鸭
人逢知己千杯少,喝酒搞笑图集
搞笑试卷,学生恶搞答题
新闻热点
疑难解答
图片精选
Kotlin结合Rxjava+Retrofit实现极
Kotlin与Java的主客观对比分析
Kotlin特性介绍及与Java 和 C#的简
Kotlin与Java哪个好?Kotlin与Java的
网友关注