import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import android.util.Base64;
public class DesUtils {
public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";
/**
* DES算法,加密
* @param data 待加密字符串
* @param key 加密私钥,长度不能够小于8位
* @return 加密后的字节数组,一般结合Base64编码使用
* @throws CryptException 异常
*/
public static String encode(String key, String data) throws Exception {
return encode(key, data.getBytes());
}
/**
* DES算法,加密
* @param data 待加密字符串
* @param key 加密私钥,长度不能够小于8位
* @return 加密后的字节数组,一般结合Base64编码使用
* @throws CryptException
* 异常
*/
private static String encode(String key, byte[] data) throws Exception {
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);
return Base64.encodeToString(bytes, 0);
} catch (Exception e) {
throw new Exception(e);
}
}
/**
* DES算法,解密
* @param data 待解密字符串
* @param key 解密私钥,长度不能够小于8位
* @return 解密后的字节数组
* @throws Exception 异常
*/
private static byte[] decode(String key, byte[] data) throws Exception {
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 cipher.doFinal(data);
} catch (Exception e) {
throw new Exception(e);
}
}
/**
* 解密.
* @param key
* @param data
* @return
* @throws Exception
*/
public static String decode(String key, String data) {
byte[] datas;
String value = null;
try {
if (System.getProperty("os.name") != null
&& (System.getProperty("os.name").equalsIgnoreCase("sunos") || System
.getProperty("os.name").equalsIgnoreCase("linux"))) {
datas = decode(key, Base64.decode(data, 0));
} else {
datas = decode(key, Base64.decode(data, 0));
}
value = new String(datas);
} catch (Exception e) {
value = "";
}
return value;
}
}
分享到:
相关推荐
java代码用于实现DES算法,代码注释相当清楚,一看就明白!
为了提高安全性,通常会使用DES的双密钥版本,即3DES(Triple DES),它通过三次应用DES算法来增强安全性。 MD5是一种非对称哈希函数,它将任意长度的数据转换为固定长度的摘要。MD5的主要用途是校验数据完整性和...
2. **创建Cipher对象**:使用`Cipher`类的`getInstance()`方法,传入"DES/ECB/PKCS5Padding"字符串,表明我们使用DES算法,ECB模式(Electronic Codebook),以及PKCS5Padding填充方式。 3. **初始化Cipher**:根据...
为了将C语言实现的3DES算法应用于Android平台,需要编写JNI接口文件,定义Java调用C函数的接口,并在Android.mk或CMakeLists.txt中配置编译选项,以便生成动态链接库供Java代码使用。 在实际开发中,需要注意以下几...
之前上传过:编译Android下3DES加密算法的.SO文件及源码,地址:...压缩文件内包含编译后的lib3DES.so文件,3DES加密算法的JNI C语言源码,Android的makefile文件等。希望能够帮助到有需要的朋友!
- 二维码扫描与解密: 使用Android手机摄像头扫描二维码,并通过DES算法解密获取原始数据。 - 系统设计与实现: 设计整个系统的架构,并实现各功能模块。 #### 2 开发相关技术介绍 - **2.1 ANDROID平台介绍** - *...
在Android中,可以使用`KeyGenerator`实例化并初始化,指定DES算法。通常,密钥需要随机生成,以确保安全性。 ```java KeyGenerator keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); // 56位是DES的...
在提供的压缩包中,3DES文档应该包含了关于3DES算法的详细描述,可能包括其工作流程、密钥管理以及如何在实际应用中使用3DES。文件名称为"3DES"可能是一个源代码文件,包含了3DES加密和解密的实现,或者是关于3DES...
本文将深入探讨在Android环境下如何实现DES(Data Encryption Standard)、AES(Advanced Encryption Standard)和RSA(Rivest-Shamir-Adleman)这三种主流的加密算法。 首先,DES是一种古老的对称加密算法,它使用...
`DES`(Data Encryption Standard)是一种广泛使用的对称加密算法,它允许这三种平台之间进行加密解密操作,确保数据的机密性。本篇将详细讲解如何在`Android`、`iOS`和`PHP`中实现`DES`加密解密,并探讨其在中文和...
2. DES算法:DES(Data Encryption Standard)是一种古老的对称加密算法,使用56位密钥对64位数据块进行操作。C++实现DES包括: - 密钥扩展:将56位密钥扩展为64位,其中每8位一组,第8组为奇偶校验位。 - Feistel...
前言: ... DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究, 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为D
通过以上步骤,你就成功地将3DES加密算法编译为Android可使用的JNI库,并实现了在Java层调用。这种方法适用于其他需要在Android上使用C/C++原生代码的情况,如加密、图像处理、游戏引擎等。同时,你也可以根据实际...
利用C语言编写的DES加密算法,能够对任意长度的字符数组进行加解密。通过编写相应的JNI接口文件能够很容易移植到Android平台,从而解决不同平台DES加解密结果不一致的问题。
在Android中实现DES加密,你需要使用Java的`javax.crypto`包。以下是一些关键步骤: 1. **生成密钥**:首先,你需要创建一个DES密钥。这通常通过`KeyGenerator`类完成,指定算法为"DES"。例如: ```java ...
C#系统采用DES加密字符串,Android用DES解密就是不成功,从网上搜了许多源码都不能用,深入研究加密流程及算法是没有时间的。 网上搜的源码大都使用系统默认的加密模式,当我们对这些参数不了解时,就会浪费许多时间...
这个代码库对于理解如何在Android应用中集成DES加密功能非常有帮助,但要注意DES的安全性限制,对于敏感数据,建议使用更强大的加密算法,如AES。同时,密钥管理也非常重要,确保密钥的安全存储和传输,否则即使使用...
对于开发者来说,理解和使用这个"des.c"文件,首先需要掌握DES算法的基本原理,然后需要熟悉Android和Linux的C编程环境,包括如何编译、链接和调用C代码,以及如何在Android的JNI层集成原生代码。此外,安全性和效率...