123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package crypto;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.math.BigInteger;
- import java.security.InvalidKeyException;
- import java.security.NoSuchAlgorithmException;
- import java.util.Random;
- import javax.crypto.BadPaddingException;
- import javax.crypto.Cipher;
- import javax.crypto.IllegalBlockSizeException;
- import javax.crypto.NoSuchPaddingException;
- import javax.crypto.spec.SecretKeySpec;
- public class SimpleAES {
- private Cipher cipherEnc;
- private Cipher cipherDec;
- public SimpleAES() {
- SecretKeySpec skey = readKey();
- try {
- cipherEnc = Cipher.getInstance("AES/ECB/PKCS5Padding");
- cipherDec = Cipher.getInstance("AES/ECB/PKCS5Padding");
- cipherEnc.init(Cipher.ENCRYPT_MODE, skey);
- cipherDec.init(Cipher.DECRYPT_MODE, skey);
- } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException e) {
- e.printStackTrace();
- }
- }
- public synchronized byte[] encrypt(byte[] in) {
- byte[] out = null;
- try {
- out = cipherEnc.doFinal(in);
- } catch (IllegalBlockSizeException | BadPaddingException e) {
- e.printStackTrace();
- }
- return out;
- }
- public synchronized byte[] decrypt(byte[] in) {
- byte[] out = null;
- try {
- out = cipherDec.doFinal(in);
- } catch (IllegalBlockSizeException | BadPaddingException e) {
- e.printStackTrace();
- }
- return out;
- }
- public static void generateKey(Random rand) {
- byte[] key = new byte[16];
- rand.nextBytes(key);
- SecretKeySpec skey = new SecretKeySpec(key, "AES");
- FileOutputStream fos = null;
- ObjectOutputStream oos = null;
- try {
- fos = new FileOutputStream("key/aes.key");
- oos = new ObjectOutputStream(fos);
- oos.writeObject(skey);
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (oos != null) {
- try {
- oos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- public SecretKeySpec readKey() {
- FileInputStream fis = null;
- ObjectInputStream ois = null;
- SecretKeySpec skey = null;
- try {
- fis = new FileInputStream("key/aes.key");
- ois = new ObjectInputStream(fis);
- skey = (SecretKeySpec) ois.readObject();
- } catch (IOException | ClassNotFoundException e) {
- e.printStackTrace();
- } finally {
- if (ois != null) {
- try {
- ois.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return skey;
- }
- // test
- public static void main(String[] args) {
- SimpleAES aes = new SimpleAES();
- byte[] plain = new byte[10240 * 8];
- Crypto.sr.nextBytes(plain);
- byte[] enc = aes.encrypt(plain);
- byte[] tmp = new byte[plain.length];
- Crypto.sr.nextBytes(tmp);
- aes.decrypt(aes.encrypt(tmp));
- byte[] dec = aes.decrypt(enc);
- long in = new BigInteger(plain).longValue();
- long cipher = new BigInteger(enc).longValue();
- long out = new BigInteger(dec).longValue();
- System.out.println(in != cipher);
- System.out.println(in == out);
- System.out.println(plain.length == dec.length);
- }
- }
|