`
endual
  • 浏览: 3567641 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 简单的加密减码

    博客分类:
  • java
 
阅读更多
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;

/**
 * 通过DES加密解密实现一个String字符串的加密和解密.
 * 
 * @author badpeas
 * 
 */
public class EncryptDecryptData {

	public static void main(String[] args) throws Exception{
		// 1.1 >>> 首先要创建一个密匙
		// DES算法要求有一个可信任的随机数源
		SecureRandom sr = new SecureRandom();
		// 为我们选择的DES算法生成一个KeyGenerator对象
		KeyGenerator kg = KeyGenerator.getInstance("DES");
		kg.init(sr);
		// 生成密匙
		SecretKey key = kg.generateKey();
		// 获取密匙数据
		byte rawKeyData[] = key.getEncoded();
		
		
		rawKeyData = "hzilearning".getBytes() ; //密匙为的原来数据源是hzilearning,也可以随机产生
		System.out.println("密匙===>" + rawKeyData);
		String str = "hi.baidu.com/badpeas"; // 待加密数据
		// 2.1 >>> 调用加密方法
		byte[] encryptedData = encrypt(rawKeyData, str); //需要有密匙
		// 3.1 >>> 调用解密方法
		decrypt(rawKeyData, encryptedData); //将密匙放入
	}

	/**
	 * 加密方法
	 * 
	 * @param rawKeyData
	 * @param str
	 * @return
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws NoSuchPaddingException
	 * @throws InvalidKeySpecException
	 */
	public static byte[] encrypt(byte rawKeyData[], String str)
			throws Exception {
		// DES算法要求有一个可信任的随机数源
		SecureRandom sr = new SecureRandom();
		// 从原始密匙数据创建一个DESKeySpec对象
		DESKeySpec dks = new DESKeySpec(rawKeyData);
		// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
		SecretKey key = keyFactory.generateSecret(dks);
		// Cipher对象实际完成加密操作
		Cipher cipher = Cipher.getInstance("DES");
		// 用密匙初始化Cipher对象
		cipher.init(Cipher.ENCRYPT_MODE, key, sr);
		// 现在,获取数据并加密
		byte data[] = str.getBytes();
		// 正式执行加密操作
		byte[] encryptedData = cipher.doFinal(data);

		System.out.println("加密后===>" + encryptedData);
		return encryptedData;
	}

	/**
	 * 解密方法
	 * 
	 * @param rawKeyData
	 * @param encryptedData
	 * @throws IllegalBlockSizeException
	 * @throws BadPaddingException
	 * @throws InvalidKeyException
	 * @throws NoSuchAlgorithmException
	 * @throws NoSuchPaddingException
	 * @throws InvalidKeySpecException
	 */
	public static String decrypt(byte rawKeyData[], byte[] encryptedData)
			throws IllegalBlockSizeException, BadPaddingException,
			InvalidKeyException, NoSuchAlgorithmException,
			NoSuchPaddingException, InvalidKeySpecException {
		// DES算法要求有一个可信任的随机数源
		SecureRandom sr = new SecureRandom();
		// 从原始密匙数据创建一个DESKeySpec对象
		DESKeySpec dks = new DESKeySpec(rawKeyData);
		// 创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
		SecretKey key = keyFactory.generateSecret(dks);
		// Cipher对象实际完成解密操作
		Cipher cipher = Cipher.getInstance("DES");
		// 用密匙初始化Cipher对象
		cipher.init(Cipher.DECRYPT_MODE, key, sr);
		// 正式执行解密操作
		byte decryptedData[] = cipher.doFinal(encryptedData);
		System.out.println("解密后===>" + new String(decryptedData));
		return new String(decryptedData);
	}

}

 

分享到:
评论

相关推荐

    基于Java实现的加解密方法(DES、3DES、AES)以及五种分组密码工作模式

    - **ECB(Electronic Codebook)模式**:是最简单的加密模式,每个明文块独立加密,不考虑上下文,因此不适用于相同明文块的加密。 - **CBC(Cipher Block Chaining)模式**:每个明文块加密前先与前一个密文块...

    java写的凯撒加密解密程序源码

    由于Java不直接支持对字符进行加减运算,所以我们需要将字符转换为其ASCII值进行计算,然后再转换回字符。 在Java中,我们可以创建两个方法,一个用于加密,一个用于解密。加密方法接收明文字符串、偏移量作为参数...

    凯撒加密(包括数字)

    现在我们来看这个`Caesar.java`文件,它应该是一个实现凯撒加密算法的Java程序。 在Java中,我们通常会定义一个名为`Caesar`的类,包含两个主要功能:加密(encrypt)和解密(decrypt)。这些方法可能接受字符串或...

    古典加密算法Caesar 包括实习报告

    在Java平台上实现凯撒密码的加密和解密,可以深入理解字符处理和加密原理,同时提供了一个学习基础加密算法和软件开发实践的良好案例。 首先,我们需要理解Java平台开发的基本知识。Java是一种广泛使用的面向对象的...

    Pasword-based-Encryptor:给定密码(任何字符串)的加密器可以通过对char进行加,减(解密)两个ASCII字符,密码和来自文本的char来对char进行加密和解密。

    9. **实际应用**:这样的工具可能用于个人数据保护、简单的通信加密,或者作为更复杂加密系统的组成部分。 在深入研究这个项目之前,开发者或使用者需要具备基本的Java编程技能,理解加密和解密的基本原理,以及...

    JAVA 范例大全 光盘 资源

    实例18 矩阵的加减和转置 43 实例19 数组实现顺序栈与队列 46 实例20 Arrays数组的应用 50 第5章 面向对象设计 54 实例21 图形面积与周长(抽象类) 54 实例22 宠物结婚(封装) 56 实例23 一个盒子(继承) ...

    30个java工具类

    5. **通信服务端(simpleServer.java)**:这是一个简单的服务器端实现,用于处理客户端的请求,可能包括数据接收、解析、响应等。在进行网络编程时,这类工具类可以帮助快速搭建基础的服务器框架。 6. **通信客户端...

    JAVA课程设计简单的计算器(含代码).pdf

    在本JAVA课程设计中,学生将承担创建一个简单的计算器的任务,该计算器不仅要求具备基本的数学运算功能,还应有用户友好的交互界面和额外的辅助功能。此项目旨在帮助学生深入理解和掌握Java编程语言,同时熟悉GUI...

    工作中经常常会用到的java工具类

    2. **TimeUtil.java** 和 **DateUtil.java**:时间日期工具类,提供了处理时间和日期的函数,如获取当前时间、时间格式化、时间比较、日期加减等。在处理日期和时间相关的业务逻辑时,这两个工具类可以极大地提升...

    Android对称加密与非对称加密

    在Java或Android开发中,可以通过将字符转换为ASCII码,然后加减位移量,再转换回字符来实现加密和解密。以下是一个简单的凯撒密码的Java实现: ```java public class CaesarCipher { // 加密 public static ...

    MyEclipse-7.5.0版注册码

    - **`change()`** 方法:这个方法实现了对输入字符串的简单加密。它遍历输入字符串中的每个字符,对于数字字符、大写字母和小写字母分别进行不同的偏移变换。例如,数字字符通过加上5并取模10后再还原,实现了简单的...

    java范例开发大全源代码

     实例155 实现加减乘除的方法 240  8.3 面向对象的设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158 同学聚会(工厂方法模式) 244  实例159 图书展(抽象...

    java范例开发大全

    实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 实例160...

    myeclipse 6.5注册码

    在探讨这个主题之前,我们先简单了解一下MyEclipse及其注册码的基本概念。 ### MyEclipse简介 MyEclipse是基于Eclipse平台的一个增强版集成开发环境(IDE),主要用于Java EE应用开发。它提供了大量的插件支持,如...

    java语言程序设计实验指导书(20220103012042).pdf

    随后,通过编写和调试一个简单的HelloWorld程序,学习者将理解Java程序的基本结构,即每一个Java程序都是以类为单位组织的,而程序的执行入口是包含在public修饰的类中的main方法。实验还引导学生熟悉使用javac.exe...

    Java范例开发大全 (源程序)

     实例155 实现加减乘除的方法 240  8.3 面向对象的设计模式 241  实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158 同学聚会(工厂方法模式) 244  实例159 图书展(抽象工厂...

    Java范例开发大全(全书源程序)

    实例155 实现加减乘除的方法 240 8.3 面向对象的设计模式 241 实例156 Singleton单例模式 242 实例157 招聘(简单工厂模式) 243 实例158 同学聚会(工厂方法模式) 244 实例159 图书展(抽象工厂模式) 246 ...

    MD5 加密 开源 源码

    在提供的代码片段中,我们可以看到一个简单的MD5加密算法实现。下面是对其中关键部分的解释: #### 1. 定义常量 ```java static final int S11 = 7; static final int S12 = 12; static final int S13 = 17; ...

Global site tag (gtag.js) - Google Analytics