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

2024-06-19 11:08

本文主要是介绍对称加密算法之国际数据加密标准——IDEA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IDEA算法

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

1. 算法简述

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

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

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

2.模型分析

IDEA算法模型和对称加密算法模型一致
在这里插入图片描述

3. 代码实现

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

算法密钥长度默认密钥长度工作模式填充方式备注
IDEA128128ECBPKCS5Padding、 PKCS7Padding、ISO10126Padding、ZeroBytePaddingBouncy 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:lhzheng@grandstream.cn* 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 测试代码

@Testpublic 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加密解密算法

这篇关于对称加密算法之国际数据加密标准——IDEA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074854

相关文章

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

IDEA如何实现远程断点调试jar包

《IDEA如何实现远程断点调试jar包》:本文主要介绍IDEA如何实现远程断点调试jar包的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录问题步骤总结问题以jar包的形式运行Spring Boot项目时报错,但是在IDEA开发环境javascript下编译

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

pandas实现数据concat拼接的示例代码

《pandas实现数据concat拼接的示例代码》pandas.concat用于合并DataFrame或Series,本文主要介绍了pandas实现数据concat拼接的示例代码,具有一定的参考价值,... 目录语法示例:使用pandas.concat合并数据默认的concat:参数axis=0,join=

C#代码实现解析WTGPS和BD数据

《C#代码实现解析WTGPS和BD数据》在现代的导航与定位应用中,准确解析GPS和北斗(BD)等卫星定位数据至关重要,本文将使用C#语言实现解析WTGPS和BD数据,需要的可以了解下... 目录一、代码结构概览1. 核心解析方法2. 位置信息解析3. 经纬度转换方法4. 日期和时间戳解析5. 辅助方法二、L