首页 > 开发 > Java > 正文

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

2019-10-21 18:22:44
字体:
来源:转载
供稿:网友

本文实例讲述了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程序设计有所帮助。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表