`
liulang203
  • 浏览: 55961 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

JAVA对称加密算法汇总及实现

阅读更多
一、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加密解密汇总.zip

    DES是一种古老的对称加密算法,而ECB是DES最基础的加密模式之一。在本文中,我们将深入探讨DES加密算法及其ECB模式的工作原理,以及在C#、JAVA、JavaScript和iOS这四种不同编程语言中的实现案例。 DES是一种块加密...

    Java 加密解密基础分类及模式归纳整理

    Java 加密解密基础分类及模式归纳整理是 Java 加密解密的基础知识,主要介绍了 Java 加密解密基础分类方法汇总的相关资料。 一、密码学概述 密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,...

    国密算法 SM2,3,4,9, ZUC 全打包

    国密算法的打包资源,如"国密算法规范——汇总",通常包含了这些算法的详细规范、实现代码、测试向量等,旨在为开发者提供一个完整的参考框架,以便在实际项目中正确、安全地使用这些算法。通过学习这些规范,开发者...

    唯品会2019秋招开发笔试题A卷.docx

    - **非对称加密算法**:**RSA** 和 **DSA** 属于非对称加密算法,这类算法使用一对密钥(公钥和私钥),其中公钥用于加密,私钥用于解密,反之亦然。因此,它们不属于对称加密算法。 ### HTTP协议 - **HTTP请求...

    java饿汉式的应用源码-java-interview:Javainterview-高级Java面试题2019

    java饿汉式的应用源码 java-interview Senior Java engineer interview exams in 2019 高级Java工程师面试题2019 资深Java工程师复习计划 ...面试题来自本人的程序员朋友面试经历,经本人和开源爱好者汇总 ...对称加密

    华为校园招聘历年经典面试题汇总:Java开发

    2. **加密算法**:使用AES、RSA等加密算法保护数据。 3. **证书管理**:通过数字证书验证服务器身份,建立信任关系。 4. **数据签名**:使用数字签名技术验证数据完整性。 #### 设计一个XML格式,将一个类序列化为...

    2013中国软件杯题目

    推荐使用C++开发,该题目的重点是实现文件系统的透明加密,可能需要用到文件系统过滤驱动技术,如FUSE(Filesystem in Userspace),以及对称加密算法如AES,确保文件在保存时自动加密,读取时解密。 **比赛题目六...

    各大IT公司笔试真题汇总.txt

    - **加密技术**:对称加密、非对称加密等。 - **身份验证**:用户名密码认证、令牌认证等。 - **防火墙与入侵检测**:如何设置防火墙规则、常见的入侵检测方法等。 ### 6. 其他技术领域 除了上述技术领域之外,...

    工作中遇到的问题汇总

    - **RSA加密**:JDK自带的RSA算法是一种非对称加密技术,用于保证数据传输的安全性。可以指定公钥和私钥进行加密和解密操作。 - **SHA算法**:SHA(Secure Hash Algorithm)是一种哈希算法,常用于数据完整性验证...

    软考-中级软件设计师2004-2019年真题与答案解析汇总.zip

    3. 信息安全:加密技术(对称加密、非对称加密、哈希函数),防火墙,病毒防护,访问控制等。 六、法律法规与标准化 1. 软件知识产权:版权法、专利法,了解软件开发中的法律风险。 2. 标准化:ISO/IEC标准,软件...

    百度校园招聘历年经典面试题汇总:Android岗

    ### 百度校园招聘历年经典面试题汇总:Android岗 #### 1. MVP模式的优缺点 - **优点**: - **低耦合**:将业务逻辑与UI分离,提高了代码的可维护性。 - **易于测试**:Presenter层可以方便地进行单元测试。 - *...

    CryptoJS中AES实现前后端通用加解密技术

    AES(高级加密标准)是一种广泛使用的对称加密算法,能够提供强大的数据保密性。对称加密算法意味着加密和解密使用同一个密钥。在实际应用中,为了保证数据加密的安全性,我们还会使用初始化向量(IV),它是加密...

    江苏大学考研885程序设计真题

    3. **网络安全**:基础的加密技术,如对称加密和非对称加密,以及HTTPS的安全机制。 通过历年真题(如2004-2009、2014-2018)的练习,考生可以熟悉江苏大学考研885程序设计科目的考试风格,提高答题技巧。同时,...

    SSL常用专业缩略语汇总

    - **涵盖范围**: 包括公钥加密算法、数字签名算法以及相关协议等。 #### SAN (Subject Alternative Name) - **定义**: 使用者备用名称,用于扩展证书主体名称中包含的信息。 - **作用**: 允许一个证书支持多个不同...

Global site tag (gtag.js) - Google Analytics