使用Java怎么实现一个AES算法

这篇文章给大家介绍使用Java怎么实现一个AES 算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

成都地区优秀IDC服务器托管提供商(成都创新互联公司).为客户提供专业的遂宁服务器托管,四川各地服务器托管,遂宁服务器托管、多线服务器托管.托管咨询专线:13518219792

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 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 算法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


本文名称:使用Java怎么实现一个AES算法
转载注明:http://scyanting.com/article/gocigj.html