package com.joyveb.common.utils;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import org.apache.commons.codec.binary.Base64;
import com.joyveb.common.exception.DesException;
public class DESCoder {
private final static String CHARSET = "utf-8";
/**
* 对cipherText进行DES解密
*
* @param cipherText
* @return
* @throws DesException
*/
public static String desDecrypt(String cipherText, String desKey)
throws DesException {
String decryptStr = null;
try {
// 解密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
byte[] input = Base64.decodeBase64(cipherText.trim().getBytes(
CHARSET));
cipher.init(Cipher.DECRYPT_MODE, genSecretKey(desKey));
byte[] output = cipher.doFinal(input);
decryptStr = new String(output, CHARSET);
} catch (Exception e) {
throw new DesException("DES解密发生异常!", e);
}
return decryptStr;
}
/**
* 对message进行DES加密
*
* @param message
* @return
* @throws DesException
*/
public static String desEncrypt(String message, String desKey)
throws DesException {
String encryptStr = null;
byte encryptByte[];
try {
// 加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, genSecretKey(desKey));
byte[] cipherText = cipher
.doFinal(message.trim().getBytes(CHARSET));
encryptByte = Base64.encodeBase64(cipherText);
encryptStr = new String(encryptByte, CHARSET);
encryptStr = encryptStr.replaceAll("\r\n", "").replaceAll("\n", "");
} catch (Exception e) {
throw new DesException("des加密发生异常!", e);
}
return encryptStr;
}
private static SecretKey genSecretKey(String key)
throws InvalidKeyException, NoSuchAlgorithmException,
InvalidKeySpecException {
DESKeySpec desKeySpec = new DESKeySpec(hexStringToByte(key));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
return secretKey;
}
private static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i < len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
}
return result;
}
private static byte toByte(char c) {
byte b = (byte) "0123456789ABCDEF".indexOf(c);
return b;
}
}
分享到:
相关推荐
总结来说,“小程序 DES加密 + 小程序 util包.zip”资源包通过提供DES加密算法的实现,以及一系列实用的开发工具,为小程序的安全性和开发效率提供了双重支持。开发者在使用这一资源包时,不仅能有效提升小程序的...
首先,我们来了解一下DES加密的基本原理。DES使用56位的密钥对64位的数据块进行操作,通过一系列复杂的置换和异或运算,将明文转化为密文。尽管DES的安全性在今天已经相对较弱,但由于其简单性和广泛的库支持,它...
在本文中,我们将深入探讨DES加密的原理以及如何在前端JavaScript和后端Java之间实现互通。 DES算法基于Feistel结构,它将明文分为左右两半进行迭代处理,通过64轮的加密过程将原始信息转化为密文。每个轮次包括一...
在Java中实现DES加密,我们可以按照以下步骤进行。 首先,让我们理解DES算法的基本原理。DES是一种分组密码,它将明文数据分为64位的数据块进行处理。但是,实际的DES算法只使用了56位的密钥,因为其中8位是奇偶...
DES(Data Encryption Standard)是一种广泛使用的对称加密算法,为保护数据的隐私提供了基础。本篇文章将详细探讨 JavaScript 和 Java 实现 DES 加密算法,并讨论如何在两者之间实现互通。 **DES 算法介绍** DES ...
本篇将详细介绍如何在网页前端使用JavaScript进行3DES加密,并在后端Java环境中进行解密。 一、3DES加密原理 3DES是DES的加强版,它使用了3个不同的56位密钥,通过3次独立的DES加密过程来提高安全性。具体流程如下...
在Java中实现DES加密和解密并不复杂,主要涉及到`javax.crypto`包中的类。下面我们将详细介绍如何使用JAVA来实现DES算法: 1. 导入必要的库: ```java import javax.crypto.Cipher; import javax.crypto.SecretKey;...
4. **解密过程**:解密过程与加密相反,首先使用密钥K1进行DES解密,然后使用密钥K2进行DES加密,最后使用密钥K1再次解密。这样,如果K1和K2相同,就相当于使用同一个密钥进行了两次DES操作,从而恢复原始明文。 在...
利用Java进行3DES的加密算法,包含字符串密钥,偏移量加密字符串,数组密钥,偏移量加密数组,数组密钥加密数组,字符串密钥加密字符串。如果对你有帮助,麻烦给个好评吧!
在Java中实现3DES加密和解密涉及到以下几个关键点: 1. **密钥生成**:在Java中,你可以使用`java.security.KeyGenerator`类来生成3DES密钥。首先需要实例化一个`KeyGenerator`对象,然后调用`init()`方法初始化它...
### 3DES加密解密详解 #### 一、概述 三重数据加密标准(Triple Data Encryption Standard,简称3DES)是一种基于DES(Data Encryption Standard)的加密算法,它通过使用两个或三个不同的密钥对数据进行三次加密...
在Java中,实现DES加密通常需要使用`javax.crypto`包中的类,但在这个场景中,我们关注的是与Base64编码相关的部分,因为Base64是用于在网络上传输含有二进制数据的文本格式。在Java 8及更高版本中,`java.util.Base...
在Java和C语言中实现DES加密互通,主要涉及以下几个关键步骤: 1. 密钥处理:DES支持56位的密钥,但Java和C语言中通常使用64位的密钥,其中第8位用于奇偶校验。在Java中,可以使用`java.security.Key`接口的实现类`...
简明 DES 加密算法实现 DES 加密算法是一种经典的对称加密算法,由美国国家标准与技术研究院(NIST)于 1977 年公布,广泛应用于商业和政府领域。该算法将明文按照 64 位分组,每个分组独立加密,输出 64 位密文。...
本文将详细介绍DES加密解密工具类及其使用,并解析在给定的文件列表中的`SecurityPropertyes.java`、`CryptoTools.java`和`SecurityUtil.java`这三个文件可能包含的内容。 首先,`CryptoTools.java`很可能是实现DES...
### 常用MD5加密算法和3-DES加密算法Java实现 在现代软件开发过程中,数据的安全性变得越来越重要。对于数据传输和存储过程中的安全性保障,加密技术发挥着至关重要的作用。本文将详细介绍如何在Java环境中实现两种...
本文将详细介绍Java中常见的几种加密算法,包括AES加密、RSA加密、DES加密、MD5哈希加密、Base64编码以及异或(XOR)加密。理解并掌握这些算法对于开发安全的应用至关重要。 首先,AES(Advanced Encryption Standard...
### 利用DES加密算法保护Java源代码 #### 一、引言 随着信息技术的快速发展,数据的安全性问题越来越受到人们的重视。对于软件开发者来说,保护自己的Java源代码不被非法访问或篡改是非常重要的。Java作为一种跨...
本篇文章将详细探讨DES加密解密在Java和JavaScript中的应用,并且重点讨论如何确保在两者之间得到一致的结果。 DES算法基于64位的块加密,使用56位的密钥进行操作。它通过一系列复杂的数学变换,将明文数据转换成...