Java原生法によるAESアルゴリズムの例の実現


本論文の実例は、Java原生法によるAESアルゴリズムの実現について述べる。皆さんに参考にしてあげます。具体的には以下の通りです。
AES(Advanced Ecryption Standard)の高級暗号化規格は、暗号学ではRijdael暗号化法とも呼ばれ、米連邦政府が採用しているブロック暗号化の標準です。この標準はもとのDESに取って代わるために用いて、すでに多方面に分析されてしかも全世界のために使われました。対称鍵暗号化で最も人気のあるアルゴリズムの一つとなっています。

/**
 * AES   
 * <p/>
 *         :CBC;   :128;  :PKCS5Padding
 * <p/>
 * key            16  
 *
 * @author Deniro Li ([email protected])
 *     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=="));
  }
}

PS:暗号解読に興味のある友達は、当駅のオンラインツールも参照できます。
テキストオンライン暗号解読ツール(AES、DES、RC 4などを含む):
http://tools.jb51.net/password/txt_アンコール
MD 5オンライン暗号化ツール:
http://tools.jb51.net/password/CreateMD5Password
オンラインハッシュ/ハッシュアルゴリズム暗号化ツール:
http://tools.jb51.net/password/hash_encrypt
オンラインMD 5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160暗号化ツール:
http://tools.jb51.net/password/hash_md 5_share
オンラインshar 1/shar 224/shar 256/shar 384/shar 512暗号化ツール:
http://tools.jb51.net/password/sha_アンコール
java関連の内容についてもっと興味がある読者は、当駅のテーマを調べてもいいです。「Java数学演算技術のまとめ」、「Javaデータ構造とアルゴリズム教程」、「Java文字と文字列操作テクニックのまとめ」、「Java操作DOMノード技術のまとめ」、「Javaキャッシュ操作テクニックのまとめ
本論文で述べたように、皆さんのjavaプログラムの設計に役に立ちます。