【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

相关文章

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.