`

java的3DES加密算法实践

阅读更多
java的3DES加密算法实践 最近开发需要用户JAVA的3DES加密算法,刚开始不是很清楚,找了一些网页,查了一些资料总算写好了,贴出来大家共享一下,可以直接运行的.. package com.zte.cuixudong.desede; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.spec.InvalidKeySpecException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class Tool { private static final String Algorithm = "DESede"; private static final String ADD_STRING = "000000000000000000000000"; private static final int KEY_LENGTH = 24; public static void main(String[] args) { // 密钥 String key = "1234567890"; // 原文 String src = "abcdef"; System.out.println("原 文:" + src); Tool tool = new Tool(); // tool.test(src, key); // 密文 String desString = ""; desString = tool.encryCode(src, key); System.out.println("加密结果:" + desString); String newSrc = tool.deCode(desString, key); System.out.println("解密结果:" + newSrc); } // keybyte为加密密钥,长度为24字节 public void test(String src, String key) { // 密钥字节数组 byte[] keybytes = getKeyBytes(key); // 密钥 SecretKey deskey = getKey(keybytes); Cipher cipher; byte[] encbytes; String str = ""; String newString = ""; try { System.out.println("----------加密----------"); cipher = Cipher.getInstance(Algorithm); cipher.init(Cipher.ENCRYPT_MODE, deskey); encbytes = cipher.doFinal(src.getBytes()); BASE64Encoder baseE = new BASE64Encoder(); str = this.base64Encoder(encbytes); // str = baseE.encode(encbytes); System.out.println("密文:" + str); System.out.println("----------加密----------"); System.out.println("----------解密----------"); encbytes = base64Decoder(str); BASE64Decoder base64 = new BASE64Decoder(); // encbytes = base64.decodeBuffer(str); cipher.init(Cipher.DECRYPT_MODE, deskey); byte[] b = cipher.doFinal(encbytes); System.out.println("明文:" + new String(b)); System.out.println("----------解密----------"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalBlockSizeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 加密算法 * * @param src * 原文 * @param key * 密钥 * @return encString 加密后的密文 */ public String encryCode(String src, String key) { // 加密 Cipher cipher; // 密钥字节数组 byte[] keybytes = getKeyBytes(key); // 密钥 SecretKey deskey = getKey(keybytes); // 密文数组 byte[] encbytes = new byte[1024]; // 加密后的密文 String encString = ""; try { cipher = Cipher.getInstance(Algorithm); cipher.init(Cipher.ENCRYPT_MODE, deskey); encbytes = cipher.doFinal(src.getBytes()); encString = base64Encoder(encbytes); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalBlockSizeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return encString; } /** * 解密算法 * * @param des * 密文 * @param key * 密钥 * @return */ public String deCode(String des, String key) { // 加密 Cipher cipher; // 密钥字节数组 byte[] keybytes = getKeyBytes(key); // 密钥 SecretKey deskey = getKey(keybytes); // 解密后的字符串 String desString = ""; byte[] desbytes = new byte[1024]; try { cipher = Cipher.getInstance(Algorithm); cipher.init(Cipher.DECRYPT_MODE, deskey); desbytes = cipher.doFinal(base64Decoder(des)); desString = new String(desbytes); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalStateException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalBlockSizeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return desString; } // 检查密钥长充,如不足24位,则加零补齐 public byte[] getKeyBytes(String keyString) { byte[] b = null; int count = 0; count = KEY_LENGTH - keyString.length(); keyString += ADD_STRING.subSequence(0, count); b = keyString.getBytes(); return b; } // 获取密钥 public SecretKey getKey(byte[] keyBytes) { SecretKey deskey = new SecretKeySpec(keyBytes, Algorithm); return deskey; } // base64转码 public String base64Encoder(byte[] b) { BASE64Encoder base64 = new BASE64Encoder(); String str = base64.encode(b); return str; } // base64解码 public byte[] base64Decoder(String str) { BASE64Decoder base64 = new BASE64Decoder(); byte[] bytes = new byte[1024]; try { bytes = base64.decodeBuffer(str); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bytes; } // 检查密钥格式,只能包含"[0-9],[a-z][A-Z]" public boolean checkKey(String key) { if (key == null || key.length() == 0 || "".equals(key)) { return false; } return true; } }
分享到:
评论

相关推荐

    Java AES DES加密算法的坑

    总结来说,理解和正确使用Java中的AES和DES加密算法,需要考虑密钥管理、初始化向量、填充模式、编码以及错误处理等多个方面,同时要关注加密过程中的安全风险和潜在陷阱。在实践中,结合合适的加密库和最佳实践,...

    DES.rar_DES JAVA_DES algorithm_DES 加密算法_DES加密算法_des ja

    在"DES.rar_DES JAVA_DES algorithm_DES 加密算法_DES加密算法_des ja"这个压缩包中,很可能包含了一个完整的Java实现的DES加密算法示例,包括源代码文件"DES.java",可能用于教学、学习或项目开发,以便开发者能够...

    JAVA中3des加密算法

    Java中的3DES(Triple Data Encryption Algorithm)是一种强化版的DES(Data Encryption Standard)加密算法,它通过三次应用DES算法来提高安全性。3DES是DES的一个变种,它使用了两个不同的密钥对数据进行三次加密...

    DES加密算法JAVA实现

    ### DES加密算法JAVA实现 #### 一、目的与意义 随着信息技术的快速发展,信息安全变得尤为重要。无论是政府机构、企业还是个人用户,都需要确保敏感信息不被未经授权的人访问。在这种背景下,密码学作为保障信息...

    DES加密算法应用

    本篇文章将深入探讨DES加密算法的应用及其在Java编程中的实现。 DES算法由IBM公司在1970年代初设计,后来被美国国家标准局采纳为数据加密标准。该算法基于Feistel结构,使用64位的密钥对64位的数据进行加密,实际...

    des加密算法的JAVA 实现

    DES(Data Encryption Standard)是一种对称加密算法,广泛应用于数据的加密保护。它基于一个64位的密钥,...然而,实际应用中,为了安全性,通常会使用更强大的加密算法如AES,并结合密钥管理和随机数生成等最佳实践。

    des加密算法事例 des加密算法事例

    在学习和实践中,你可以使用各种编程语言实现DES加密算法,例如Java、Python、C++等。这些实现通常包括密钥的生成、数据的加解密以及密钥的管理等功能。在实际应用中,由于DES的安全性问题,通常会采用3DES(Triple ...

    用java实现des加密

    Java DES加密是一种在Java编程环境中实现的对称加密算法,主要用来保护数据的安全性。DES(Data Encryption Standard)是早期广泛使用的一种加密标准,虽然现在已经被更安全的AES(Advanced Encryption Standard)所...

    用delphi写的一个des的加密解密小程序,java写的des的一个类

    Java写的DES的一个类”表明了这个压缩包包含两个部分:一个是使用Delphi编程语言编写的用于执行DES(Data Encryption Standard)加密和解密的小程序,另一个是用Java实现的DES加密类。DES是一种广泛使用的对称加密...

    DES加密DEMO(C#与JAVA)

    3. **JAVA实现DES加密解密** - **javax.crypto命名包**:JAVA中使用`javax.crypto.Cipher`类配合`DESKeySpec`和`SecretKeyFactory`实现DES加密解密。首先需要创建`DESKeySpec`对象,然后通过`SecretKeyFactory`生成...

    实验一 基于DES加密的TCP聊天程序1

    这将涉及到对TCP协议的理解,使用socket编程接口,以及在代码中集成DES加密算法的实现。 总结来说,基于DES加密的TCP聊天程序结合了传统的加密技术和网络通信的基本原理,通过学习和实践,不仅可以加深对网络安全和...

    用Java加密类实现DES、RSA及SHA的加密算法

    1. **DES加密算法**: DES是一种对称加密算法,它使用相同的密钥进行加密和解密。在Java中,可以使用`javax.crypto`包下的`Cipher`类来实现DES加密。首先,需要创建一个DES密钥,然后使用`Cipher`的`init`方法初始...

    java+3des加密+和字符串转换javalearnsa资料分享

    在“java+3des加密+和字符串转换javalearnsa资料分享”这个主题中,我们聚焦于两个关键知识点:3DES加密算法和字符串转换。 3DES(Triple Data Encryption Standard)是一种对称加密算法,是DES(Data Encryption ...

    java和javascript之间的DES加密解密

    1. **DES加密算法**: DES是一种分组密码,使用64位的数据块和56位的密钥进行操作。它通过一系列复杂的数学变换,如置换、异或和S盒操作,将明文转化为密文。由于其对称性,加密和解密使用相同的密钥,这使得DES在...

    java_3des加密源码

    Java中的3DES(Triple Data Encryption Algorithm)是一种对称加密算法,它是基于DES(Data Encryption Standard)的加强版,通过三次迭代提高安全性。在本案例中,我们关注的是使用Java实现3DES加密和解密的源码。...

    基于Java实现的加解密方法(DES、3DES、AES)以及五种分组密码工作模式

    本教程主要探讨了如何使用Java编程语言实现DES(Data Encryption Standard)、3DES(Triple DES)和AES(Advanced Encryption Standard)这三种常见的对称加密算法,并且详细讲解了五种分组密码的工作模式。...

    java+3des加密+和字符串转换

    3DES(Triple Data Encryption Standard),即三重DES加密算法,是对DES(Data Encryption Standard)的一种改进,通过三次迭代加强了加密强度,提供了更高级别的安全性。在这个主题中,我们将深入探讨Java如何实现3...

    基于java实现DES算法加密报告相关

    以下是关于DES加密算法以及Java实现的相关知识点: 1. **DES算法概述** DES是一种块加密算法,它使用56位的密钥对64位的数据块进行加密。由于其固定长度的密钥和数据块,DES在处理大量数据时可能效率较低,且56位...

    DES加密前端js和后台java互通代码

    DES(Data Encryption Standard)是一种经典的对称加密算法,它的全称是数据加密标准。在本文中,我们将深入探讨DES加密的...确保在生产环境中遵循最佳实践,比如使用更强大的加密算法和更长的密钥,以及定期更新密钥。

    java 加密算法及原理.jar

    Java中内置了DES(Data Encryption Standard)、3DES(Triple DES)以及AES(Advanced Encryption Standard)等对称加密算法。 - **DES**:是一种古老的加密算法,使用64位的密钥,但实际有效密钥长度只有56位,...

Global site tag (gtag.js) - Google Analytics