承接上文

【6、对称之IDEA加密解密】

【Bouncycstle】
再开始之前,我们必须先了解Bouncycstle。
Bouncycstle 是一款开源的密码包,其包含了大量的密码算法,其支持椭圆曲线密码算法。
【Bouncycstle所需依赖】

  
    
        org.bouncycastle
        bcprov-jdk15on
        1.56
    

【Idea原理】
idea 加密和解密过程中,明文和密文是分成64比特的块来处理的。但是秘钥宽度是128比特,加密是依赖三种代数群运算,每个代数群都是16比特数的运算。
13种加密与解密算法-IDEA篇【二】_第1张图片

【idea 生成秘钥】

public static String getKey(){
    String result = null;
    try {
        result = (new BASE64Encoder()).encodeBuffer(initkey());
    } catch (Exception e) {
        e.printStackTrace();
    }
     System.out.println("随机::Idea生成的秘钥是:" + result);
    return result;
}
/**
 *
 * 生成密钥,只有bouncycastle支持
 * @return byte[] 二进制密钥
 * */
public static byte[] initkey() throws Exception{
    //加入bouncyCastle支持
    Security.addProvider(new BouncyCastleProvider());
    //实例化密钥生成器
    KeyGenerator kg=KeyGenerator.getInstance("IDEA");
    //初始化密钥生成器,IDEA要求密钥长度为128位
    kg.init(128);
    //生成密钥
    SecretKey secretKey=kg.generateKey();
    //获取二进制密钥编码形式
    return secretKey.getEncoded();
}
    /**
 * 转换密钥
 * @param key 二进制密钥
 * @return Key 密钥
 * */
private static Key toKey(byte[] key) throws Exception{
    //实例化DES密钥
    //生成密钥
    SecretKey secretKey=new SecretKeySpec(key,"IDEA");
    return secretKey;
}

【对称之idea 加密】

public static String ideaEncrypt(String data, String key) {
    String result = null;
    try {
        byte[] data_en = encrypt(data.getBytes(), (new BASE64Decoder()).decodeBuffer(key));//Base64.decodeBase64(key)
        result = (new BASE64Encoder()).encodeBuffer(data_en);//Base64.encodeBase64String(data_en);
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println("对称之IDEA加密后的数据:" + result);
    return result;
}

/**
 * 加密数据
 * @param data 待加密数据
 * @param key 密钥
 * @return byte[] 加密后的数据
 * */
private static byte[] encrypt(byte[] data,byte[] key) throws Exception{
    //加入bouncyCastle支持
    Security.addProvider(new BouncyCastleProvider());
    //还原密钥
    Key k=toKey(key);
    //实例化
    Cipher cipher=Cipher.getInstance("IDEA/ECB/ISO10126Padding");
    //初始化,设置为加密模式
    cipher.init(Cipher.ENCRYPT_MODE, k);
    //执行操作
    return cipher.doFinal(data);
}

【对称之idea 解密】

 public static String ideaDecrypt(String data, String key) {
                String result = null;
                try {
                        byte[] data_de =decrypt((new BASE64Decoder()).decodeBuffer(data), (new BASE64Decoder()).decodeBuffer(key));;
                        result = new String(data_de);
                } catch (Exception e) {
                        e.printStackTrace();
                }
                System.out.println("对称之IDEA加密后的数据:" + result);
                return result;
        }
        /**
         * 解密数据
         * @param data 待解密数据
         * @param key 密钥
         * @return byte[] 解密后的数据
         * */
        private static byte[] decrypt(byte[] data,byte[] key) throws Exception{
                //加入bouncyCastle支持
                Security.addProvider(new BouncyCastleProvider());
                //还原密钥
                Key k =toKey(key);
                Cipher cipher=Cipher.getInstance("IDEA/ECB/ISO10126Padding");
                //初始化,设置为解密模式
                cipher.init(Cipher.DECRYPT_MODE, k);
                //执行操作
                return cipher.doFinal(data);
        }

【对称之idea加密解密小 demo】

    String key = getKey();
    String data_en = ideaEncrypt(str, key);
    ideaDecrypt(data_en, key);

13种加密与解密算法-IDEA篇【二】