import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import android.util.Base64;
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;
public class DesUtils {
public static final String ALGORITHM_DES = "DES/CBC/PKCS5Padding";
/**
* 解密.
* @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;
}
/**
* 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);
}
}
/**
* 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);
}
}
}
本文地址:http://www.xszlo.com/article/2012-11-19/7501.html,转发请保留这个地址,谢谢
分享到:
相关推荐
java代码用于实现DES算法,代码注释相当清楚,一看就明白!
为了在Android项目中实现这些加密算法,你需要创建对应的类或者工具方法,封装加密和解密过程,确保在正确管理密钥的同时,提高代码的可读性和可维护性。同时,考虑到Android设备的多样性,需要注意API版本的兼容性...
为了将C语言实现的3DES算法应用于Android平台,需要编写JNI接口文件,定义Java调用C函数的接口,并在Android.mk或CMakeLists.txt中配置编译选项,以便生成动态链接库供Java代码使用。 在实际开发中,需要注意以下几...
在Android中,可以使用`KeyGenerator`实例化并初始化,指定DES算法。通常,密钥需要随机生成,以确保安全性。 ```java KeyGenerator keyGen = KeyGenerator.getInstance("DES"); keyGen.init(56); // 56位是DES的...
这个示例可能包括创建密钥、加密和解密字符串的函数,以及如何在Android环境中运行这些函数的代码。通过阅读和理解这个示例,开发者可以快速掌握Android平台上的DES加密解密操作。 然而,值得注意的是,DES由于其...
文件名称为"3DES"可能是一个源代码文件,包含了3DES加密和解密的实现,或者是关于3DES算法的详细说明文档。 学习3DES算法,你需要理解以下关键概念: 1. 密钥长度:DES的密钥长度是56位,3DES可以看作是168位(因为...
- **技术可行性**: Android平台提供了丰富的API接口,支持图像处理和数据加密等功能,这为基于DES算法的二维码扫描系统的实现提供了技术支持。 - **经济可行性**: 开发成本相对较低,主要集中在软件开发上,硬件设备...
总结一下,Android的DES加密与.NET平台的实现具有兼容性,都是基于标准的DES算法。在Android应用开发中,可以利用`javax.crypto`包实现DES加密和解密,遵循生成密钥、创建和初始化Cipher、执行加密/解密以及处理结果...
C#代码可能使用`DESCryptoServiceProvider`类来实例化DES算法,然后使用`CreateEncryptor`和`CreateDecryptor`方法进行加密和解密。密钥和IV的处理方式与Android类似,都需要适当地管理和传递。 为了确保Android和...
C#系统采用DES加密字符串,Android用DES解密就是不成功,从网上搜了许多源码都不能用,深入研究加密流程及算法是没有时间的。 网上搜的源码大都使用系统默认的加密模式,当我们对这些参数不了解时,就会浪费许多时间...
2. DES算法:DES(Data Encryption Standard)是一种古老的对称加密算法,使用56位密钥对64位数据块进行操作。C++实现DES包括: - 密钥扩展:将56位密钥扩展为64位,其中每8位一组,第8组为奇偶校验位。 - Feistel...
对于开发者来说,理解和使用这个"des.c"文件,首先需要掌握DES算法的基本原理,然后需要熟悉Android和Linux的C编程环境,包括如何编译、链接和调用C代码,以及如何在Android的JNI层集成原生代码。此外,安全性和效率...
本文将详细介绍如何将C语言实现的3DES加密算法编译为Android平台下的动态链接库(.SO文件),并利用JNI(Java Native Interface)在Java层调用。 首先,我们需要了解3DES的工作原理。3DES是通过三次应用DES加密过程...
这个代码库对于理解如何在Android应用中集成DES加密功能非常有帮助,但要注意DES的安全性限制,对于敏感数据,建议使用更强大的加密算法,如AES。同时,密钥管理也非常重要,确保密钥的安全存储和传输,否则即使使用...
在Android开发中,有时我们需要...总的来说,这个压缩包提供的代码示例对于学习和实践Android应用中的加密技术非常有价值,尤其是通过JNI在原生层实现这些复杂的加密算法。这不仅可以提升应用的安全性,还能优化性能。
1. **DES算法原理**:DES使用了Feistel结构,分为初始置换、16轮迭代和逆初始置换三个阶段。每一轮迭代包含分组、扩展、异或、替换四个步骤,其中扩展将32位输入扩展为48位,替换是通过S盒进行非线性变换,异则是与...
DES算法由IBM公司在1970年代初期开发,并在1977年被美国国家标准局(NIST)采纳为标准。它基于块加密,每次处理64位的数据块,但其中的8位用于奇偶校验,因此实际有效数据只有56位。这56位数据被分为左右两半,每半...
DES(Data Encryption Standard)是一种广泛应用的块加密算法,它为Android应用提供了基础的数据保护手段。本文将详细讲解如何在Android上实现DES加密,以及其背后的原理和注意事项。 首先,DES是一种对称加密算法...
它通过三次迭代DES算法来提高安全性,使得密钥长度从原来的56位增加到168位(尽管实际有效密钥长度为112位,因为中间有密钥派生过程)。3Des在信息安全领域广泛应用,特别是在需要跨平台加密的场景中,如iOS、...