/*
* @(#)CipherUtil.java Project:androidkit
* Date:2012-12-18
*
* Copyright (c) 2011 CFuture09, Institute of Software,
* Guangdong Ocean University, Zhanjiang, GuangDong, China.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.lurencun.cfuture09.commons.security;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
/**
* @author Geek_Soledad (66704238@51uc.com)
*/
public class CipherUtil {
public static final String ALGORITHM_DES = "DES";
/**
* 返回可逆算法DES的密钥
*
* @param key
* 前8字节将被用来生成密钥。
* @return 生成的密钥
* @throws InvalidKeyException
* @throws NoSuchAlgorithmException
* @throws InvalidKeySpecException
*/
public static Key getDESKey(byte[] key) throws InvalidKeyException,
NoSuchAlgorithmException, InvalidKeySpecException {
DESKeySpec des = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory
.getInstance(ALGORITHM_DES);
return keyFactory.generateSecret(des);
}
/**
* 根据指定的密钥及算法,将字符串进行解密。
*
* @param data
* 要进行解密的数据,它是由原来的byte[]数组转化为字符串的结果。
* @param key
* 密钥。
* @param algorithm
* 算法。
* @return 解密后的结果。它由解密后的byte[]重新创建为String对象。如果解密失败,将返回null。
*/
public static String decrypt(String data, Key key, String algorithm) {
try {
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.DECRYPT_MODE, key);
String result = new String(cipher.doFinal(StringUtil
.hexStringToBytes(data)), "utf8");
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据指定的密钥及算法对指定字符串进行可逆加密。
*
* @param data
* 要进行加密的字符串。
* @param key
* 密钥。
* @param algorithm
* 算法。
* @return 加密后的结果将由byte[]数组转换为16进制表示的数组。如果加密过程失败,将返回null。
*/
public static String encrypt(String data, Key key, String algorithm) {
try {
Cipher cipher = Cipher.getInstance(algorithm);
cipher.init(Cipher.ENCRYPT_MODE, key);
return StringUtil.bytesToHexString(cipher.doFinal(data
.getBytes("utf8")));
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
关于其中 的StringUtil类参见http://maosidiaoxian.iteye.com/blog/1751441。
分享到:
相关推荐
Java 中的 3DES 加密解密示例(封装 byte 数组和 16 进制字符串互转) 在 Java 中,3DES 加密是一种常用的加密算法,它可以将明文数据转换为密文数据,以保护数据的安全性。在本示例中,我们将展示如何使用 3DES ...
标题中的“3DES加密解密”指的是在信息技术领域中,使用三重数据加密标准(3DES,Triple Data Encryption Standard)进行数据加密和解密的过程。3DES是一种加强版的DES加密算法,它通过三次应用DES的加密过程来提高...
C++ DES加密解密 封装成类了 此代码是测试工具,实现字符串加密解密/文件加密解密。KEY可使用2个 支持中文。 VS2010运行代码
在C++中实现DES加密解密,可以创建一个类来封装相关的操作,这样有利于代码的复用和维护。 描述中提到的"单倍双倍加密算法的实现",可能是指使用DES算法进行一次或两次加密的过程。单次DES加密使用同一个密钥对数据...
vue DES加密解密工具类 des.js,与博文中的匹配,为封装好的完整工具类
这个项目为理解和使用DES加密解密提供了一个便捷的入口,尤其是对于C++开发者来说,可以直接集成到自己的项目中,简化了加密解密的实现步骤。需要注意的是,虽然DES在历史上发挥了重要作用,但由于其56位的密钥长度...
在这个"VC下DES加密解密程序"中,我们将会探讨如何在Visual C++环境下实现DES算法。 首先,DES加密算法基于64位的数据块进行操作,但实际有效的密钥长度只有56位,因为有8位用于奇偶校验和设计上的特殊用途。DES...
在Delphi中实现DES加密解密,可能涉及到TDes或THashDES等加密组件的使用,这些组件通常会封装DES的加密和解密过程,为开发者提供简单易用的接口。 Java是另一种流行的编程语言,它具有跨平台的特性。在Java中实现...
DESLIB是一个C++实现的DES加密解密库,包含在提供的压缩包文件`DES.cpp`中。这个库允许开发者在他们的程序中集成DES加密和解密功能。下面将详细介绍DES加密解密算法及其在`DES.cpp`中的实现原理。 **DES算法概述:*...
总的来说,这个压缩包提供了一套完整的Java实现的DES加密解密工具,包括核心算法、子密钥生成、文件加密等功能,对于学习DES算法和在Java项目中使用DES加密的开发者来说,是一个非常实用的资源。使用者可以通过阅读...
本资源提供了一个C++实现的DES加密解密库,特别适用于64位数据和中英文字符的加密解密操作。这个库设计为易于集成到项目中,只需将其文件添加到您的工程即可开始使用。 DES(数据加密标准)是1970年代由IBM开发的一...
对于这些加密解密方法的封装,开发者通常会创建一个单独的工具类或库,包含静态方法,这些方法接受明文或密文,以及必要的密钥或参数,然后返回加密或解密后的结果。封装的好处是简化了代码的使用,提高了代码的...
总的来说,这个实验旨在让学生理解并实现DES加密解密的过程,同时熟悉MFC库的应用,提高他们在实际项目中的编程能力。通过这个作业,学生不仅学习了密码学的基本原理,还锻炼了使用C++和MFC开发Windows应用的能力。
在C/C++中实现DES加密解密接口,你需要理解以下核心概念: 1. 密钥扩展:DES的56位密钥需要通过一系列的Permutation和Combining操作扩展成64位,去除每轮使用的8位奇偶校验位,实际用于加密的密钥是56位。 2. ...
2. 使用库:由于JavaScript原生并不支持DES算法,开发者通常会借助第三方库,如crypto-js,来实现DES加密解密功能。这些库已经封装好了DES算法的复杂逻辑,使得开发者可以方便地调用。 3. 加密和解密函数:通过调用...
在本文中,我们将深入探讨如何在C++和C#这两种不同的编程语言中实现DES加密解密。 首先,让我们来看看C++中的实现。在C++中,我们可以使用如`openssl`库来实现DES功能。安装库后,我们需要包含必要的头文件,如`#...
在这个压缩包"CDES.rar_3des_Des加密解密_cdes"中,包含了一些关于DES(Data Encryption Standard)和3DES(Triple DES)加密解密的实现代码,这对于理解这两种经典加密算法以及如何在C++中应用它们是非常有价值的。...
在Java中实现DES加密和解密是一项常见的任务,通常涉及到`java.security`和`javax.crypto`这两个包中的类和接口。以下是对这个主题的详细解释: 1. **DES算法原理**:DES是一种分组密码,它将明文数据分成64位的...
DES加密的完美封装,一共一套加密和解密的方法,前提是使用自己的加密密钥