DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准 ,是1972年美国IBM 公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位进行分组,将分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。
DES加密算法特点:分组比较短、密钥太短、密码生命周期短、运算速度较慢。
DES工作的基本原理是,其入口参数有三个:key、data、mode。 key为加密解密使用的密钥 ,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64
位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。
DES( Data Encryption Standard)算法,于1977年得到美国政府的正式许可,是一种用56位密钥来加密64位数据的方法。虽然56位密钥的DES算法已经风光不在,而 且常有用Des加密的明文被破译的报道,但是了解一下昔日美国的标准加密算法总是有益的,而且目前DES算法得到了广泛的应用,在某些场合,仍然发挥着余热。
package test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.security.Key; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; import javax.crypto.KeyGenerator; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class DESUtil { Key key ; public DESUtil() { } public DESUtil(String str) { setKey(str); // 生成密匙 } public Key getKey() { return key ; } public void setKey(Key key) { this . key = key; } /** * 根据参数生成 KEY */ public void setKey(String strKey) { try { KeyGenerator _generator = KeyGenerator.getInstance ( "DES" ); _generator.init( new SecureRandom(strKey.getBytes())); this . key = _generator.generateKey(); _generator = null ; } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } } /** * 加密 String 明文输入 ,String 密文输出 */ public String encryptStr(String strMing) { byte [] byteMi = null ; byte [] byteMing = null ; String strMi = "" ; BASE64Encoder base64en = new BASE64Encoder(); try { byteMing = strMing.getBytes( "UTF8" ); byteMi = this .encryptByte(byteMing); strMi = base64en.encode(byteMi); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { base64en = null ; byteMing = null ; byteMi = null ; } return strMi; } /** * 解密 以 String 密文输入 ,String 明文输出 * * @param strMi * @return */ public String decryptStr(String strMi) { BASE64Decoder base64De = new BASE64Decoder(); byte [] byteMing = null ; byte [] byteMi = null ; String strMing = "" ; try { byteMi = base64De.decodeBuffer(strMi); byteMing = this .decryptByte(byteMi); strMing = new String(byteMing, "UTF8" ); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { base64De = null ; byteMing = null ; byteMi = null ; } return strMing; } /** * 加密以 byte[] 明文输入 ,byte[] 密文输出 * * @param byteS * @return */ private byte [] encryptByte( byte [] byteS) { byte [] byteFina = null ; Cipher cipher; try { cipher = Cipher.getInstance ( "DES" ); cipher.init(Cipher. ENCRYPT_MODE , key ); byteFina = cipher.doFinal(byteS); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { cipher = null ; } return byteFina; } /** * 解密以 byte[] 密文输入 , 以 byte[] 明文输出 * * @param byteD * @return */ private byte [] decryptByte( byte [] byteD) { Cipher cipher; byte [] byteFina = null ; try { cipher = Cipher.getInstance ( "DES" ); cipher.init(Cipher. DECRYPT_MODE , key ); byteFina = cipher.doFinal(byteD); } catch (Exception e) { throw new RuntimeException( "Error initializing SqlMap class. Cause: " + e); } finally { cipher = null ; } return byteFina; } /** * 文件 file 进行加密并保存目标文件 destFile 中 * * @param file * 要加密的文件 如 c:/test/srcFile.txt * @param destFile * 加密后存放的文件名 如 c:/ 加密后文件 .txt */ public void encryptFile(String file, String destFile) throws Exception { Cipher cipher = Cipher.getInstance ( "DES" ); // cipher.init(Cipher.ENCRYPT_MODE, getKey()); cipher.init(Cipher. ENCRYPT_MODE , this . key ); InputStream is = new FileInputStream(file); OutputStream out = new FileOutputStream(destFile); CipherInputStream cis = new CipherInputStream(is, cipher); byte [] buffer = new byte [1024]; int r; while ((r = cis.read(buffer)) > 0) { out.write(buffer, 0, r); } cis.close(); is.close(); out.close(); } /** * 文件采用 DES 算法解密文件 * * @param file * 已加密的文件 如 c:/ 加密后文件 .txt * * @param destFile * 解密后存放的文件名 如 c:/ test/ 解密后文件 .txt */ public void decryptFile(String file, String dest) throws Exception { Cipher cipher = Cipher.getInstance ( "DES" ); cipher.init(Cipher. DECRYPT_MODE , this . key ); InputStream is = new FileInputStream(file); OutputStream out = new FileOutputStream(dest); CipherOutputStream cos = new CipherOutputStream(out, cipher); byte [] buffer = new byte [1024]; int r; while ((r = is.read(buffer)) >= 0) { cos.write(buffer, 0, r); } cos.close(); out.close(); is.close(); } public static void main(String[] args) throws Exception { DESUtil des = new DESUtil( "1234567" ); // DES 加密文件 // des.encryptFile("G:/test.doc", "G:/ 加密 test.doc"); // DES 解密文件 // des.decryptFile("G:/ 加密 test.doc", "G:/ 解密 test.doc"); String str1 = " 要加密的字符串 test" ; // DES 加密字符串 String str2 = des.encryptStr(str1); // DES 解密字符串 String deStr = des.decryptStr(str2); System. out .println( " 加密前: " + str1); System. out .println( " 加密后: " + str2); System. out .println( " 解密后: " + deStr); } }
相关推荐
Java DES加密是一种在Java编程环境中实现的对称加密算法,主要用来保护数据的安全性。DES(Data Encryption Standard)是早期广泛使用的一种加密标准,虽然现在已经被更安全的AES(Advanced Encryption Standard)所...
Java 实现文件的 RSA 和 DES 加密 在现代密码技术中,根据密钥类型的不同,可以将其分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称加密算法用来对敏感数据等信息进行加密,常用的...
### 使用JAVA实现DES加密解密的关键知识点 #### 1. DES算法概述 DES(Data Encryption Standard),即数据加密标准,是一种对称密钥算法,由IBM公司开发,并于1977年被美国国家标准局(ANSI)采纳为数据加密标准。...
在Java中实现DES加密和解密是一项常见的任务,通常涉及到`javax.crypto`包中的类和接口。本篇文章将详细阐述DES加密解密的Java实现过程。 首先,我们需要了解DES算法的基本原理。DES是一种块密码,它将明文数据分成...
在Java中,我们可以使用`javax.crypto`包中的类来实现DES加密。以下将详细介绍如何在Java中实现DES加密,并提供一个实例。 首先,理解DES算法的基本原理: DES是一种块密码,它将明文分为64位的数据块进行加密,...
DES 加密 JAVA 网络安全与密码技术
Java实现Des加密(不用加载包),有完整S盒子。 部分代码如下: ackage desJava; import java.util.*; public class Des { byte[] bytekey; public Des(String strKey) { this.bytekey = strKey.getBytes();...
在Java中实现DES加密,主要涉及到`javax.crypto`包中的类,如`KeyGenerator`用于生成密钥,`Cipher`用于进行加解密操作。首先,你需要生成一个DES密钥,这通常包括设定密钥长度(DES的标准长度为56位,但在Java中是...
主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下
虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现。 JAVA实现加密代码有详细解释,不多废话。注意:DES加密和解密过程中,密钥长度都必须是8的倍数 代码如下: public byte[] ...
本文将详细介绍如何在Java环境中实现DES加密和解密。 DES,全称为数据加密标准,基于Feistel密码结构,采用64位的密钥,但其中只有56位是真正参与加密过程的。DES分为两个主要阶段:加密和解密,这两个过程使用相同...
本DEMO提供了C#和JAVA两种编程语言下的DES加密和解密实现,这对于理解DES算法及其在实际开发中的应用非常有帮助。 1. **DES算法原理** - **结构**:DES算法基于Feistel网络,它将明文分为左右两半,通过一系列的...
在Java中实现DES加密和解密是一项常见的任务,通常涉及到`java.security`和`javax.crypto`这两个包中的类和接口。以下是对这个主题的详细解释: 1. **DES算法原理**:DES是一种分组密码,它将明文数据分成64位的...
DES加解密算法,java实现,可运行!
下面将详细阐述DES加密解密的基本原理、Java和JavaScript的实现方式以及如何在两者之间进行互操作。 1. **DES加密算法**: DES是一种分组密码,使用64位的数据块和56位的密钥进行操作。它通过一系列复杂的数学变换...
本篇文章将详细探讨 JavaScript 和 Java 实现 DES 加密算法,并讨论如何在两者之间实现互通。 **DES 算法介绍** DES 是一种块加密算法,使用了 64 位的数据块和 56 位的密钥。它通过一系列复杂的数学运算(包括...
本篇文章将详细探讨Java环境下如何实现3DES加密算法,并介绍相关知识点。 首先,让我们了解3DES的工作原理。3DES是对原始DES算法的扩展,它通过执行三次加密过程来提高安全性。简而言之,3DES分为两种模式:EDE...
Java实现des加密解密算法,des加密解密算法