中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Java怎么實現一個AES 算法

發布時間:2021-04-14 17:49:12 來源:億速云 閱讀:179 作者:Leah 欄目:編程語言

這篇文章給大家介紹使用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 算法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

六安市| 周口市| 谢通门县| 武隆县| 南雄市| 嵊州市| 凤城市| 古交市| 大渡口区| 监利县| 武山县| 贺州市| 胶南市| 阿图什市| 永定县| 江口县| 乌什县| 丽水市| 菏泽市| 新津县| 南投市| 彰化县| 读书| 甘南县| 镇赉县| 许昌县| 武鸣县| 孝昌县| 汉川市| 日照市| 桓台县| 大足县| 黑山县| 定边县| 金乡县| 乐平市| 定远县| 阳泉市| 广丰县| 崇信县| 灌南县|