【Android工具类】比DES加密更安全的算法——3DES加密算法

2024-04-15 19:38

本文主要是介绍【Android工具类】比DES加密更安全的算法——3DES加密算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

   转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992

    在前面的文章里面,我们讨论了DES算法,同时也明白了如何才能保证不同平台下的加密和解密结果的一致性。但是DES作为出现了很长时间的一种加密算法,随着计算机运算能力的加强,DES加密容易被暴力破解,其安全性变得有点低。于是,为了增强数据的安全性,3DES算法就应运而生了。

    3DES,顾名思义,就是对DES加密算法的改进,3DES通过对每个数据进行3次DES加密,从而降低被破解的可能性。

     如果我们要使用3DES加密,需要以下几个步骤

    ①传入共同约定的密钥(keyBytes)以及算法(Algorithm),来构建SecretKey密钥对象

        SecretKey deskey = new SecretKeySpec(keyBytes, Algorithm);    

    ②根据算法实例化Cipher对象。它负责加密/解密

        Cipher c1 = Cipher.getInstance(Algorithm);    

    ③传入加密/解密模式以及SecretKey密钥对象,实例化Cipher对象

        c1.init(Cipher.ENCRYPT_MODE, deskey);    

    ④传入字节数组,调用Cipher.doFinal()方法,实现加密/解密,并返回一个byte字节数组

        c1.doFinal(src);

   

    具体的代码实现过程如下

package com.qust.rollcallstudent.utils;  import java.security.InvalidAlgorithmParameterException;  
import java.security.Key;  
import java.security.spec.AlgorithmParameterSpec;  
import java.util.Locale;  import javax.crypto.Cipher;  
import javax.crypto.SecretKeyFactory;  
import javax.crypto.spec.DESKeySpec;  
import javax.crypto.spec.IvParameterSpec;  /** *  * @ClassName: com.qust.rollcallstudent.utils.DESUtil * @Description: DES加密解密工具包 * @author zhaokaiqiang * @date 2014-11-13 下午8:40:56 *  */  
public class DESUtil {  public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";  /** * DES算法,加密 *  * @param data *            待加密字符串 * @param key *            加密私钥,长度不能够小于8位 * @return 加密后的字节数组,一般结合Base64编码使用 * @throws InvalidAlgorithmParameterException * @throws Exception */  public static String encode(String key, String data) {  if (data == null)  return null;  try {  DESKeySpec dks = new DESKeySpec(key.getBytes());  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");  // key的长度不能够小于8位字节  Key secretKey = keyFactory.generateSecret(dks);  Cipher cipher = Cipher.getInstance(ALGORITHM_DES);  IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());  AlgorithmParameterSpec paramSpec = iv;  cipher.init(Cipher.ENCRYPT_MODE, secretKey, paramSpec);  byte[] bytes = cipher.doFinal(data.getBytes());  return byte2String(bytes);  } catch (Exception e) {  e.printStackTrace();  return data;  }  }  /** * DES算法,解密 *  * @param data *            待解密字符串 * @param key *            解密私钥,长度不能够小于8位 * @return 解密后的字节数组 * @throws Exception *             异常 */  public static String decode(String key, String data) {  if (data == null)  return null;  try {  DESKeySpec dks = new DESKeySpec(key.getBytes());  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");  // key的长度不能够小于8位字节  Key secretKey = keyFactory.generateSecret(dks);  Cipher cipher = Cipher.getInstance(ALGORITHM_DES);  IvParameterSpec iv = new IvParameterSpec("12345678".getBytes());  AlgorithmParameterSpec paramSpec = iv;  cipher.init(Cipher.DECRYPT_MODE, secretKey, paramSpec);  return new String(cipher.doFinal(byte2hex(data.getBytes())));  } catch (Exception e) {  e.printStackTrace();  return data;  }  }  /** * 二行制转字符串 *  * @param b * @return */  private static String byte2String(byte[] b) {  StringBuilder hs = new StringBuilder();  String stmp;  for (int n = 0; b != null && n < b.length; n++) {  stmp = Integer.toHexString(b[n] & 0XFF);  if (stmp.length() == 1)  hs.append('0');  hs.append(stmp);  }  return hs.toString().toUpperCase(Locale.CHINA);  }  /** * 二进制转化成16进制 *  * @param b * @return */  private static byte[] byte2hex(byte[] b) {  if ((b.length % 2) != 0)  throw new IllegalArgumentException();  byte[] b2 = new byte[b.length / 2];  for (int n = 0; n < b.length; n += 2) {  String item = new String(b, n, 2);  b2[n / 2] = (byte) Integer.parseInt(item, 16);  }  return b2;  }  } 


这篇关于【Android工具类】比DES加密更安全的算法——3DES加密算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

jvm调优常用命令行工具详解

《jvm调优常用命令行工具详解》:本文主要介绍jvm调优常用命令行工具的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一 jinfo命令查看参数1.1 查看jvm参数二 jstack命令2.1 查看现场堆栈信息三 jstat 实时查看堆内存,gc情况3.1