|
Java¤Ç¶¦Ä̸°°Å¹æÊý¼°¤Ç°Å¹æ²½¤ò¹Ô¤¦¤ä¤ê¤«¤¿¤Ç¤¹¡£AES°Å¹æ²½¤Ë¤Ï AES/ECB/ISO10126Padding AES/ECB/PKCS5Padding AES/CBC/ISO10126Padding AES/CBC/PKCS5Padding ¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¤¬°Ê²¼¤Î¥µ¥ó¥×¥ë¤Ï AES/ECB/PKCS5Padding ¤Ç°Å¹æ²½¤ò¤·¤Æ¤¤¤Þ¤¹¡£ ¥µ¥ó¥×¥ë¥³¡¼¥É †import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class EncryptSample {
public static void main(String[] args) throws Exception {
String key = "aaaaaaaaaabbbbbb"; // <-128bit¤Î¥¡¼
byte[] keyBytes = key.getBytes(); // ¥Ð¥¤¥ÈÎó¤ËÊÑ´¹
byte[] enBytes = EncryptSample.encryptECB("abcdefg hijklmn".getBytes(),
keyBytes); // "abcdefg hijklmn" ¤È¤¤¤¦Ê¸»ú¤ò¶¦Ä̸°¤Ç°Å¹æ²½
// System.out.println(new String(enBytes));
byte[] deBytes = EncryptSample.decryptECB(enBytes, keyBytes);
// ¶¦Ä̸°°Å¹æ²½¤Ê¤Î¤Ç¡¢Æ±¤¸¥«¥®¤ÇÉü¹æ¤Ç¤¤ë
System.out.println(new String(deBytes));
// °Å¹æ²½¤·¤¿¥Ç¡¼¥¿¤òBase64¤·¤Æ¤ß¤ë
byte[] bs = Base64.encodeBase64(enBytes, false);
System.out.println(new String(bs));
}
public static byte[] encryptECB(byte[] data, byte[] secret_key) {
SecretKeySpec sKey = new SecretKeySpec(secret_key, "AES");
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, sKey);
return cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return new byte[0];
}
public static byte[] decryptECB(byte[] encData, byte[] secret_key) {
SecretKeySpec sKey = new SecretKeySpec(secret_key, "AES");
try {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, sKey);
return cipher.doFinal(encData);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return new byte[0];
}
}
¼Â¹Ô·ë²Ì¤Ï°Ê²¼¤ÎÄ̤ê abcdefg hijklmn zhzF4Q/BcnoKCWruBNWcsg== ¶¦Ä̸°¤ò¥é¥ó¥À¥à¤ËÀ¸À®¤¹¤ë †¾å¤Î¤è¤¦¤ËÌÀ¼¨Åª¤Ë»ØÄꤷ¤Æ¶¦Ä̸°¤òºî¤ë¤³¤È¤â¤Ç¤¤ë¤·¡¢¥é¥ó¥À¥à¤Ë¸°¤òÀ¸À®¤¹¤ë¤³¤È¤â¤Ç¤¤Þ¤¹¡£ private static Key genKey() throws NoSuchAlgorithmException {
KeyGenerator generator = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
generator.init(128, random);
Key key = generator.generateKey();
return key;
}
¤³¤Î¥¡¼¥¯¥é¥¹¤«¤é byte[] keyBytes = key.getEncoded(); ¤È¤ä¤Ã¤Æ¥¡¼¤Î¥Ð¥¤¥ÈÎó¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£¤³¤Î¥Ð¥¤¥ÈÎó¤ò¥Õ¥¡¥¤¥ë¤ËÊݸ¤·¤Æ¤ª¤±¤Ð¸°¥Õ¥¡¥¤¥ë¤¬¤Ç¤¤Þ¤¹¡£ Utils.byte2File(keyBytes, "hoge.key"); ¤³¤Îµ»ö¤Ï ¸½ºß¤Î¥¢¥¯¥»¥¹:27856 |