【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

相关文章

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

基于C#实现PDF文件合并工具

《基于C#实现PDF文件合并工具》这篇文章主要为大家详细介绍了如何基于C#实现一个简单的PDF文件合并工具,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下... 界面主要用于发票PDF文件的合并。经常出差要报销的很有用。代码using System;using System.Col

redis-cli命令行工具的使用小结

《redis-cli命令行工具的使用小结》redis-cli是Redis的命令行客户端,支持多种参数用于连接、操作和管理Redis数据库,本文给大家介绍redis-cli命令行工具的使用小结,感兴趣的... 目录基本连接参数基本连接方式连接远程服务器带密码连接操作与格式参数-r参数重复执行命令-i参数指定命

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不