对称加密算法之国际数据加密标准——IDEA

IDEA算法

  • 1. 算法简述
  • 2.模型分析
  • 3. 代码实现
    • 3.1 代码实现
    • 3.2 测试代码
    • 3.3 运行结果

1. 算法简述

IDEA算法早于AES算法作为DES算法的可选替代算法,IDEA没有在DES算法基础上做修改,而是另辟溪径寻求突破解决方案。

IDEA算法使用长度128位的密钥,数据块大小为64位。IDEA数据强加密算法,破解难度大。

IDEA算法是目前电子邮件加密算法之一。

2.模型分析

IDEA算法模型和对称加密算法模型一致
对称加密算法之国际数据加密标准——IDEA_第1张图片

3. 代码实现

Java中没有提供IDEA算法实现,但在Bouncy Castle中提供了IDEA算法实现,IDEA算法在Bouncy Castle中具体实现细节如下:

算法 密钥长度 默认密钥长度 工作模式 填充方式 备注
IDEA 128 128 ECB PKCS5Padding、 PKCS7Padding、ISO10126Padding、ZeroBytePadding Bouncy Castle实现

3.1 代码实现

基于Android7.0单元测试的IDEA实现

package com.calvin.android.demo2.secrity;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

import java.security.Key;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

/**
 * Author:cl
 * Email:[email protected]
 * Date:20-10-20
 */
public class IDEACoder {
    //密钥算法
    public static final String KEY_ALGORITHM = "IDEA";
    //加密解密算法/工作模式/填充方式
    public static final String CIPHER_ALGORITHM = "IDEA/ECB/ISO10126Padding";

    /**
     * 转换密钥
     * @param key 二进制密钥
     * @return Key 密钥
     * @throws Exception 异常
     */
    private static Key toKey(byte[] key) throws Exception {
        //生成秘密密钥
        SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);
        return secretKey;
    }

    /**
     * 解密
     * @param data 待解密数据
     * @param key 密钥
     * @return byte[] 解密数据
     * @throws Exception 异常
     */
    public static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        //加入BouncyCastleProvider支持
        //Security.addProvider(new BouncyCastleProvider());
        //还原密钥
        Key k = toKey(key);
        //实例化加密组件
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM, new BouncyCastleProvider());
        //初始化,设置为解密模式
        cipher.init(Cipher.DECRYPT_MODE, k);
        //执行数据解密
        return cipher.doFinal(data);
    }

    public static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        //加入BouncyCastleProvider支持
        //Security.addProvider(new BouncyCastleProvider());
        //还原密钥
        Key k = toKey(key);
        //实例化加密组件
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM, new BouncyCastleProvider());
        //初始化,设置为加密模式
        cipher.init(Cipher.ENCRYPT_MODE, k);
        //执行数据加密
        return cipher.doFinal(data);
    }

    public static byte[] initKey() throws Exception {
        //加入BouncyCastleProvider支持
        //实例化
        KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM,new BouncyCastleProvider());
        //初始化
        kg.init(128);
        //生成秘密密钥
        SecretKey secretKey = kg.generateKey();
        //获得密钥的二进制编码形式
        return secretKey.getEncoded();
    }
}

3.2 测试代码

@Test
    public void IDEATest() throws Exception{
        String inputStr = "IDEA加密解密算法";
        byte[] inputData = inputStr.getBytes();
        System.out.println("原文:\t "+inputStr);
        //初始化密钥
        byte[] key = IDEACoder.initKey();
        System.out.println("密钥:\t "+ Base64.encodeToString(key, Base64.DEFAULT));
        //加密
        inputData = IDEACoder.encrypt(inputData, key);
        System.out.println("加密后:\t "+Base64.encodeToString(inputData, Base64.DEFAULT));
        //解密
        byte[] outputData = IDEACoder.decrypt(inputData, key);
        String outputStr = new String(outputData);
        System.out.println("解密后:\t "+outputStr);
        //校验
        assertEquals(inputStr, outputStr);
    }

3.3 运行结果

2020-10-20 12:21:06.571 7220-7238/com.calvin.android.demo2 I/System.out: 原文:	 IDEA加密解密算法
2020-10-20 12:21:06.958 7220-7238/com.calvin.android.demo2 I/System.out: 密钥:	 83ecS3WoqlJxj48+YLgBnw==
2020-10-20 12:21:07.269 7220-7238/com.calvin.android.demo2 I/System.out: 加密后:	 7uoHa7bj9z+C0GqRofcJ57PQ/ttrKQu3
2020-10-20 12:21:07.569 7220-7238/com.calvin.android.demo2 I/System.out: 解密后:	 IDEA加密解密算法

你可能感兴趣的:(加密安全)