`
zhao_chong
  • 浏览: 1777 次
  • 性别: Icon_minigender_1
  • 来自: 贫民窟
最近访客 更多访客>>
社区版块
存档分类
最新评论

菜鸟第一帖—文本加密

阅读更多
package com.test.zc;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.util.Scanner;
import java.util.Vector;

import javax.crypto.Cipher;

public class RSAEncrypt implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6905604215351939890L;

	private KeyPairGenerator keyPairGen;

	private KeyPair keyPair;

	private RSAPrivateKey privateKey;

	private RSAPublicKey publicKey;

	// 测试
	public static void main(String[] args) {
		RSAEncrypt encrypt = new RSAEncrypt();

		try {
			encrypt.readFile();
		} catch (FileNotFoundException e1) {
			encrypt.initEncrypt();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		Scanner input = new Scanner(System.in);
		System.out.println("加密 y/n :");
		if ("y".equals(input.next())) {
			System.out.println("加密操作");
			System.out.println("请输入需加密的文件路径:");
			File file = new File(input.next());
			if (file.exists()) {
				System.out.println("请输入加密后的输出路径:");
				File newFile = new File(input.next());
				encrypt.encryptFile(encrypt, file, newFile);
			}
		} else {
			System.out.println("解密操作");
			System.out.println("请输入需解密的文件路径:");
			File file = new File(input.next());
			if (file.exists()) {
				System.out.println("请输入解密后的输出路径:");
				File newFile = new File(input.next());
				try {
					encrypt.decryptFile(encrypt, file, newFile);
				} catch (Exception e) {
					System.out.println("不是加密文件");
				}

			}
		}

	}

	public void readFile() throws IOException, ClassNotFoundException {
		FileInputStream fis = null;
		fis = new FileInputStream("d:/rsa.ob");
		ObjectInputStream ois = new ObjectInputStream(fis);
		Vector vector = (Vector) ois.readObject();
		this.setPublicKey((RSAPublicKey) vector.get(0));
		this.setPrivateKey((RSAPrivateKey) vector.get(1));
		ois.close();
		fis.close();
	}

	public void initEncrypt() {
		// 实例类型
		try {
			this.setKeyPairGen(KeyPairGenerator.getInstance("RSA"));
		} catch (NoSuchAlgorithmException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		// 初始化长度
		this.getKeyPairGen().initialize(512);
		// 生成KeyPair
		this.setKeyPair(this.getKeyPairGen().generateKeyPair());
		// Generate keys
		this.setPrivateKey((RSAPrivateKey) this.getKeyPair().getPrivate());
		this.setPublicKey((RSAPublicKey) this.getKeyPair().getPublic());
		FileOutputStream fos = null;
		ObjectOutputStream oos = null;
		try {
			fos = new FileOutputStream("d:/rsa.ob");
			oos = new ObjectOutputStream(fos);
			Vector vector = new Vector();
			vector.add(this.getPublicKey());
			vector.add(this.getPrivateKey());
			oos.writeObject(vector);
			oos.close();
			fos.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 加密文件
	 * 
	 * @param encrypt
	 *            RSAEncrypt对象
	 * @param file
	 *            源文件
	 * @param newFile
	 *            目标文件
	 */
	public void encryptFile(RSAEncrypt encrypt, File file, File newFile) {
		try {
			InputStream is = new FileInputStream(file);
			OutputStream os = new FileOutputStream(newFile);

			byte[] bytes = new byte[53];
			while (is.read(bytes) > 0) {
				byte[] e = encrypt.encrypt(encrypt.getPublicKey(), bytes);
				bytes = new byte[53];
				os.write(e, 0, e.length);
			}
			os.close();
			is.close();
			System.out.println("write success");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 解密文件
	 * 
	 * @param encrypt
	 *            RSAEncrypt对象
	 * @param file
	 *            源文件
	 * @param newFile
	 *            目标文件
	 */
	public void decryptFile(RSAEncrypt encrypt, File file, File newFile) {
		try {
			InputStream is = new FileInputStream(file);
			OutputStream os = new FileOutputStream(newFile);
			byte[] bytes1 = new byte[64];
			while (is.read(bytes1) > 0) {
				byte[] de = encrypt.decrypt(encrypt.getPrivateKey(), bytes1);
				bytes1 = new byte[64];
				os.write(de, 0, de.length);
			}
			os.close();
			is.close();
			System.out.println("write success");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 加密实现
	 * 
	 * @return byte[] 加密后的字节数组
	 */
	protected byte[] encrypt(RSAPublicKey publicKey, byte[] obj) {
		if (publicKey != null) {
			try {
				Cipher cipher = Cipher.getInstance("RSA");
				cipher.init(Cipher.ENCRYPT_MODE, publicKey);
				return cipher.doFinal(obj);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * 解密实现
	 * 
	 * @return byte[] 解密后的字节数组
	 */
	protected byte[] decrypt(RSAPrivateKey privateKey, byte[] obj) {
		if (privateKey != null) {
			try {
				Cipher cipher = Cipher.getInstance("RSA");
				cipher.init(Cipher.DECRYPT_MODE, privateKey);
				return cipher.doFinal(obj);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	public KeyPair getKeyPair() {
		return keyPair;
	}

	public void setKeyPair(KeyPair keyPair) {
		this.keyPair = keyPair;
	}

	public KeyPairGenerator getKeyPairGen() {
		return keyPairGen;
	}

	public void setKeyPairGen(KeyPairGenerator keyPairGen) {
		this.keyPairGen = keyPairGen;
	}

	public RSAPrivateKey getPrivateKey() {
		return privateKey;
	}

	public void setPrivateKey(RSAPrivateKey privateKey) {
		this.privateKey = privateKey;
	}

	public RSAPublicKey getPublicKey() {
		return publicKey;
	}

	public void setPublicKey(RSAPublicKey publicKey) {
		this.publicKey = publicKey;
	}
}




写的仓促很不规范...反正是给别人提供思路..无所谓啦 哈哈
分享到:
评论

相关推荐

    Ubuntu菜鸟使用手册

    第1章介绍了手册的使用方法和一些基本的约定,比如如何阅读官方文档和脚本样例。这里也提到了基本设置,比如用户账户的创建、系统时区的配置等。此外,还涉及了Ubuntu的发行版概念,让读者了解不同的Ubuntu版本之间...

    仿京东的价值1000费用的菜鸟商城

    【标题】"仿京东的价值1000费用的菜鸟商城"揭示了这是一个模仿京东电商平台的项目,具有商业价值,可能是由于其收费性质而被开源分享出来。从描述中我们可以推测,这个项目在菜鸟窝(一个可能的技术学习或分享平台)...

    精易模块[源码] V5.15

    8、恢复“文本_加密”与“文本_解密”,把新版加解密改名为"文本_加密c"与“文本_解密c”。 MD5:5831C531ABD80ADD0EFE10172AEED71F 精易模块 V5.11 what’s new:(20150101) 1、修复“文本_取中间_批量”获取...

    第1讲:渗透测试简介-入门(http协议).rar

    渗透测试是网络安全领域中的一个重要概念,它是一种模拟黑客攻击行为,以评估计算机系统、网络或应用程序的安全性的技术。本讲主要关注的是渗透测试的基础知识,特别是与HTTP协议相关的部分。HTTP(超文本传输协议)...

    光辉正版乐库 1.68.zip

    2-封闭:对首页语录对应的文档进行了加密处理,用户不再拥有自定添加语录的功能,虽然封闭了,但我会随时更新 3-更新:语录条目 【光辉正版乐库-115盘数据截取 1.65】2011.06.26 1-后台新增 站点设置 功能 ...

    Spire.Pdf无水印版本

    // 修改第一页的文本 sourceDocument.Pages[0].GetFirstTextBox().Text = "文本已修改!"; // 保存修改 sourceDocument.SaveToFile("Modified.pdf"); ``` **三、API使用指南** Spire.Pdf提供了丰富的类和方法来...

    易语言程序免安装版下载

    易语言5.0测试版1发布于2009/12/28,是易语言5.0静态编译版第一个公开测试版本 ******************************************************************************** ** 以下是易语言4.x及以前版本的升级信息 ...

    Xshell-6.0.0091p

    1. **服务器连接**:Xshell 提供了多种协议支持,包括 Secure Shell (SSH) 协议,用于加密的远程登录,确保数据传输的安全性。用户可以通过它连接到 Linux、Unix 或其他支持 SSH 的服务器进行远程操作,例如执行命令...

    毕设&课程作业_智能阅卷系统,批量录入试卷的扫描图片并自动打分.zip

    1. **图像处理与识别**:智能阅卷的第一步是将纸质试卷扫描成电子版图片。这一过程涉及图像预处理,如去噪、二值化,以便后续的字符识别(OCR)能够准确地提取答案。OCR技术是利用模式识别和深度学习算法,使系统...

    课程设计:基于QT和MYSQL的学生竞赛管理系统 分别有学生 老师 管理员三种用户的登陆 数据库设计采用三范式.zip

    在这个系统中,数据库设计采用了第三范式(3NF),这是一种数据库规范化的过程,可以减少数据冗余,提高数据的一致性,降低更新异常。数据库可能包括了用户表(记录用户信息)、竞赛表(记录竞赛详情)、成绩表...

    毕业设计:基于PHP文件管理系统.zip

    5. **文件预览**:对于支持在线预览的文件类型(如文本、图片、PDF等),系统应提供预览功能。这可能需要利用第三方库或服务来解析和显示文件内容。 6. **文件搜索**:实现文件搜索功能,用户可以通过关键词查找所...

    酒店管理系统

    源代码是程序的原始文本形式,程序员可以对其进行修改和定制以适应特定酒店的需求。数据库文件则存储了酒店的所有关键数据,如客户信息、房间状态、预订记录等。 酒店管理系统的功能模块通常包括: 1. 预订管理:...

    使用uniapp + uView 打造微信小程序&H5端 在线教育网校系统.zip

    1. **uniapp框架**:uniapp是一个基于Vue.js开发的多端开发框架,它使用Vue的语法,但能编译到iOS、Android、Web、微信小程序等多个平台。开发者可以通过uniapp的API和组件来实现跨平台的交互逻辑。 2. **uView UI...

    蓝色的采购信息管理系统手机界面wap模板

    1. **HTML5**: HTML5是超文本标记语言的最新版本,它引入了许多新特性,如语义化标签(如、、、等)、离线存储(离线Web应用程序)、媒体元素(和)、拖放功能以及更好的数据输入控件。这些特性使得HTML5更适合用于...

Global site tag (gtag.js) - Google Analytics