Java加密技术(二)—— AES128&DES&3DES

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/male09/article/details/80970081
public class AES128 {
    static String AES = "AES/ECB/NoPadding";

    public AES128() {
    }

    public static byte[] encrypt(byte[] key, byte[] data) {
        try {
            byte[] Encrypt_conn = null;
            if (data.length % 16 != 0) {
                Encrypt_conn = new byte[(data.length / 16 + 1) * 16];
                System.arraycopy(data, 0, Encrypt_conn, 0, data.length);
            } else {
                Encrypt_conn = data;
            }

            SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
            Cipher cipher = Cipher.getInstance(AES);
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(Encrypt_conn);
            return encrypted;
        } catch (Exception var6) {
            var6.printStackTrace();
            return null;
        }
    }

    public static byte[] decrypt(byte[] key, byte[] encrypted1) {
        try {
            SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
            Cipher cipher = Cipher.getInstance(AES);
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] original = cipher.doFinal(encrypted1);
            return original;
        } catch (Exception var5) {
            var5.printStackTrace();
            return null;
        }
    }
}
public class MyDES {
    static String DES = "DES/ECB/NoPadding";
    static String TriDes = "DESede/ECB/NoPadding";

    public MyDES() {
    }

    /**
     * DES 加密
     * @param key 8密钥
     * @param data
     * @return
     */
    public static byte[] des_encrypt(byte[] key, byte[] data) {
        try {
            byte[] enc = null;
            byte[] bytReserve = null;
            KeySpec ks = new DESKeySpec(key);
            SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
            SecretKey ky = kf.generateSecret(ks);
            Cipher c = Cipher.getInstance(DES);
            c.init(1, ky);
            if (data.length % 8 != 0) {
                bytReserve = new byte[(data.length / 8 + 1) * 8];
                System.arraycopy(data, 0, bytReserve, 0, data.length);
                enc = c.doFinal(bytReserve);
            } else {
                enc = c.doFinal(data);
            }
            return enc;
        } catch (Exception var8) {
            var8.printStackTrace();
            return null;
        }
    }

    /**
     * DES 解密
     * @param key 密钥8
     * @param data
     * @return
     */
    public static byte[] des_decrypt(byte[] key, byte[] data) {
        try {
            KeySpec ks = new DESKeySpec(key);
            System.out.println("KeySpec"+ks);
            SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");
            SecretKey ky = kf.generateSecret(ks);
            Cipher c = Cipher.getInstance(DES);
            c.init(2, ky);
            byte[] dec = c.doFinal(data);
            return dec;
        } catch (Exception var7) {
            return null;
        }
    }

    /**
     * 3DES
     * @param key 密钥16
     * @param data
     * @return
     */
    public static byte[] trides_encrypt(byte[] key, byte[] data) {
        try {
            byte[] k = new byte[24];
            int len = data.length;
            if (data.length % 8 != 0) {
                len = data.length - data.length % 8 + 8;
            }

            byte[] needData = null;
            if (len != 0) {
                needData = new byte[len];
            }

            for (int i = 0; i < len; ++i) {
                needData[i] = 0;
            }

            System.arraycopy(data, 0, needData, 0, data.length);
            System.out.println(Utils.byte2HexStr(key)+"传入密钥长度:"+key.length);
            if (key.length == 16) {
                System.arraycopy(key, 0, k, 0, key.length);
                System.arraycopy(key, 0, k, 16, 8);
            } else {
                System.arraycopy(key, 0, k, 0, 24);
            }
            System.out.println(new String(k)+"密钥长度:"+k.length);
            KeySpec ks = new DESedeKeySpec(k);
            SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede");
            SecretKey ky = kf.generateSecret(ks);
            Cipher c = Cipher.getInstance(TriDes);
            c.init(1, ky);
            byte[] enc = c.doFinal(needData);
            return enc;
        } catch (Exception var10) {
            var10.printStackTrace();
            return null;
        }
    }

    /**
     * 3DES解密
     * @param key 密钥16
     * @param data
     * @return
     */
    public static byte[] trides_decrypt(byte[] key, byte[] data) {
        try {
            byte[] k = new byte[24];
            int len = data.length;
            if (data.length % 8 != 0) {
                len = data.length - data.length % 8 + 8;
            }

            byte[] needData = null;
            if (len != 0) {
                needData = new byte[len];
            }

            for (int i = 0; i < len; ++i) {
                needData[i] = 0;
            }

            System.arraycopy(data, 0, needData, 0, data.length);
            if (key.length == 16) {
                System.arraycopy(key, 0, k, 0, key.length);
                System.arraycopy(key, 0, k, 16, 8);
            } else {
                System.arraycopy(key, 0, k, 0, 24);
            }

            KeySpec ks = new DESedeKeySpec(k);
            SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede");
            SecretKey ky = kf.generateSecret(ks);
            Cipher c = Cipher.getInstance(TriDes);
            c.init(2, ky);
            byte[] dec = c.doFinal(needData);
            return dec;
        } catch (Exception var10) {
            return null;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/male09/article/details/80970081