一、DES算法
设置算法及参数
//算法名称
public static final String KEY_ALGORITHM = "DES";
//算法名称/加密模式/填充方式
public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";
生成密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
return secretKey.getEncoded();
还原密钥
private static Key toKey(byte[] key) {
DESKeySpec des = new DESKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(des);
return secretKey;
}
加密
public static byte[] encrypt(byte[] data ,byte[] key) {
Key k = toKey(key);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, k);
return cipher.doFinal();
}
解密
Key k = toKey(key);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, k);
return cipher.doFinal();
注:加密和解密的区别在于init初始化时模式
二、三重DES---DESede
其过程同上只需把变声明算法改变一下,Java6支持的密钥长度为112或168
//算法名称
public static final String KEY_ALGORITHM = "DESede";
//算法名称/加密模式/填充方式
public static final String CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";
还原密钥
DESedeKeySpec des = new DESedeKeySpec(key);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(des);
三、AES算法
同DES基本一致。
public static final String KEY_ALGORITHM = "AES";
public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
private static Key toKey(byte[] key){
SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);
return secretKey;
}
四、IDEA 同AES算法一致。
public static final String KEY_ALGORITHM = "IDEA";
public static final String CIPHER_ALGORITHM = "IDEA/ECB/PKCS5Padding";
private static Key toKey(byte[] key){
SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);
return secretKey;
}
五、基本口令加密---PBE
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
public class PBECode {
public static final String ALGORITHM = "PBEWITHMD5andDES";
//迭代次数
public static final int ITERATION_COUNT = 100;
/**
* 盐初始化<br>
* 盐长度必须为8字节
* @return byte[] 盐
*/
public static byte[] initSalt(){
//实例化安全随机数
SecureRandom random = new SecureRandom();
//生产盐
return random.generateSeed(8);
}
/**
* 转换密钥
* @param password 密码
* @return key 密钥
* @throws Exception
*/
private static Key toKey(String password)throws Exception{
//密钥材料转换
PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());
//实例化
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
SecretKey secretKey = keyFactory.generateSecret(keySpec);
return secretKey;
}
/**
* 加密
* @param data 数据
* @param password 密码
* @param salt 盐
* @return byte[] 加密数据
* @throws Exception
*/
public static byte[] encrypt(byte[] data,String password,byte[] salt) throws Exception{
Key key = toKey(password);
//实例化PBE参数材料
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATION_COUNT);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key,parameterSpec);
return cipher.doFinal(data);
}
public static byte[] decrypt(byte[] data, String password,byte[] salt) throws Exception{
Key key = toKey(password);
//实例化PBE参数材料
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATION_COUNT);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key,parameterSpec);
return cipher.doFinal(data);
}
}
分享到:
相关推荐
DES是一种古老的对称加密算法,而ECB是DES最基础的加密模式之一。在本文中,我们将深入探讨DES加密算法及其ECB模式的工作原理,以及在C#、JAVA、JavaScript和iOS这四种不同编程语言中的实现案例。 DES是一种块加密...
Java 加密解密基础分类及模式归纳整理是 Java 加密解密的基础知识,主要介绍了 Java 加密解密基础分类方法汇总的相关资料。 一、密码学概述 密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,...
国密算法的打包资源,如"国密算法规范——汇总",通常包含了这些算法的详细规范、实现代码、测试向量等,旨在为开发者提供一个完整的参考框架,以便在实际项目中正确、安全地使用这些算法。通过学习这些规范,开发者...
- **非对称加密算法**:**RSA** 和 **DSA** 属于非对称加密算法,这类算法使用一对密钥(公钥和私钥),其中公钥用于加密,私钥用于解密,反之亦然。因此,它们不属于对称加密算法。 ### HTTP协议 - **HTTP请求...
java饿汉式的应用源码 java-interview Senior Java engineer interview exams in 2019 高级Java工程师面试题2019 资深Java工程师复习计划 ...面试题来自本人的程序员朋友面试经历,经本人和开源爱好者汇总 ...对称加密
2. **加密算法**:使用AES、RSA等加密算法保护数据。 3. **证书管理**:通过数字证书验证服务器身份,建立信任关系。 4. **数据签名**:使用数字签名技术验证数据完整性。 #### 设计一个XML格式,将一个类序列化为...
推荐使用C++开发,该题目的重点是实现文件系统的透明加密,可能需要用到文件系统过滤驱动技术,如FUSE(Filesystem in Userspace),以及对称加密算法如AES,确保文件在保存时自动加密,读取时解密。 **比赛题目六...
- **加密技术**:对称加密、非对称加密等。 - **身份验证**:用户名密码认证、令牌认证等。 - **防火墙与入侵检测**:如何设置防火墙规则、常见的入侵检测方法等。 ### 6. 其他技术领域 除了上述技术领域之外,...
- **RSA加密**:JDK自带的RSA算法是一种非对称加密技术,用于保证数据传输的安全性。可以指定公钥和私钥进行加密和解密操作。 - **SHA算法**:SHA(Secure Hash Algorithm)是一种哈希算法,常用于数据完整性验证...
3. 信息安全:加密技术(对称加密、非对称加密、哈希函数),防火墙,病毒防护,访问控制等。 六、法律法规与标准化 1. 软件知识产权:版权法、专利法,了解软件开发中的法律风险。 2. 标准化:ISO/IEC标准,软件...
### 百度校园招聘历年经典面试题汇总:Android岗 #### 1. MVP模式的优缺点 - **优点**: - **低耦合**:将业务逻辑与UI分离,提高了代码的可维护性。 - **易于测试**:Presenter层可以方便地进行单元测试。 - *...
AES(高级加密标准)是一种广泛使用的对称加密算法,能够提供强大的数据保密性。对称加密算法意味着加密和解密使用同一个密钥。在实际应用中,为了保证数据加密的安全性,我们还会使用初始化向量(IV),它是加密...
3. **网络安全**:基础的加密技术,如对称加密和非对称加密,以及HTTPS的安全机制。 通过历年真题(如2004-2009、2014-2018)的练习,考生可以熟悉江苏大学考研885程序设计科目的考试风格,提高答题技巧。同时,...
- **涵盖范围**: 包括公钥加密算法、数字签名算法以及相关协议等。 #### SAN (Subject Alternative Name) - **定义**: 使用者备用名称,用于扩展证书主体名称中包含的信息。 - **作用**: 允许一个证书支持多个不同...