JAVA实现RSA非对称性密码加密与解密

JAVA实现RSA非对称性密码加密与解密
JAVA实现RSA非对称性密码加密与解密

创建RSAKeyMap.java类

packagetest_time;

importjava.security.Key;

importjava.security.KeyPair;

importjava.security.KeyPairGenerator;

importjava.security.interfaces.RSAPrivateKey;

importjava.security.interfaces.RSAPublicKey;

importjava.util.HashMap;

importjava.util.Map;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

@SuppressWarnings("unused")

public class RSAKeyMap {

public static final String KEY_ALGORITHM = "RSA";

public static final String SIGNATURE_ALGORITHM = "MD5withRSA";

private static final String PUBLIC_KEY = "RSAPublicKey";

private static final String PRIVATE_KEY = "RSAPrivateKey";

public static String getPublicKey(MapkeyMap) throws Exception { Key key = (Key) keyMap.get(PUBLIC_KEY);

byte[] publicKey = key.getEncoded();

return encryptBASE64(key.getEncoded());

}

public static String getPrivateKey(MapkeyMap) throws Exception { Key key = (Key) keyMap.get(PRIVATE_KEY);

byte[] privateKey =key.getEncoded();

return encryptBASE64(key.getEncoded());

}

public static byte[] decryptBASE64(String key) throws Exception {

return (new BASE64Decoder()).decodeBuffer(key);

}

public static String encryptBASE64(byte[] key) throws Exception {

return (new BASE64Encoder()).encodeBuffer(key);

}

public static MapinitKey() throws Exception { KeyPairGeneratorkeyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); keyPairGen.initialize(1024);

KeyPairkeyPair = keyPairGen.generateKeyPair();

RSAPublicKeypublicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKeyprivateKey = (RSAPrivateKey) keyPair.getPrivate();

MapkeyMap = new HashMap(2);

keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); returnkeyMap;

}/*

public static void main(String[] args) {

MapkeyMap;

try {

keyMap = initKey();

String publicKey= getPublicKey(keyMap); System.out.println(publicKey);

String privateKey= getPrivateKey(keyMap); System.out.println(privateKey);

} catch (Exception e) {

e.printStackTrace();

}

}

*/

}

测试截图

将main方法注释掉

创建RSA.java类

packagetest_time;

importjava.io.UnsupportedEncodingException; importjava.security.InvalidKeyException; importjava.security.KeyFactory;

importjava.security.MessageDigest; importjava.security.NoSuchAlgorithmException; importjava.security.PrivateKey;

importjava.security.PublicKey;

importjava.security.SecureRandom;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec; importjava.util.Map;

importjavax.crypto.BadPaddingException; importjavax.crypto.Cipher;

importjavax.crypto.IllegalBlockSizeException; importjavax.crypto.KeyGenerator;

importjavax.crypto.NoSuchPaddingException; importjavax.crypto.SecretKey;

import com.sun.mail.util.BASE64DecoderStream;

import com.sun.mail.util.BASE64EncoderStream;

import sun.misc.BASE64Decoder;

public class RSA {

/**

* 传入名文和公钥钥对数据进行RSA解密

*
返回值:String

*
@paramsrc

*
@parampubkey

*
@return

*/

public static String rsaEncoding(String src,PublicKeypubkey){ try {

Cipher cip = Cipher.getInstance("RSA"); cip.init(cip.ENCRYPT_MODE, pubkey);

byte[] by = cip.doFinal(src.getBytes());

return new String(BASE64EncoderStream.encode(by));

} catch (NoSuchAlgorithmException e) {

throw new RuntimeException(e);

} catch (NoSuchPaddingException e) {

throw new RuntimeException(e);

} catch (InvalidKeyException e) {

throw new RuntimeException(e);

} catch (IllegalBlockSizeException e) {

throw new RuntimeException(e);

} catch (BadPaddingException e) {

throw new RuntimeException(e);

}

}

/**

* 传入RSA密文和私钥对数据进行解密

*
返回值:String

*
@param sec

*
@paramprivkey

*
@return

*/

public static String rsaDeEncoding(String sec,PrivateKeyprivkey){

try {

Cipher cip = Cipher.getInstance("RSA");

cip.init(cip.DECRYPT_MODE, privkey);

byte[] by = BASE64DecoderStream.decode(sec.getBytes());

return new String(cip.doFinal(by));

} catch (NoSuchAlgorithmException e) {

throw new RuntimeException(e);

} catch (NoSuchPaddingException e) {

throw new RuntimeException(e);

} catch (InvalidKeyException e) {

throw new RuntimeException(e);

} catch (IllegalBlockSizeException e) {

throw new RuntimeException(e);

} catch (BadPaddingException e) {

throw new RuntimeException(e);

}

}

/**

* 将String类型公钥转换成PublicKey类型

* @param key

* @return

* @throws Exception

*/

public static PublicKeygetPublicKey(String key) throws Exception {

byte[] keyBytes;

keyBytes = (new BASE64Decoder()).decodeBuffer(key);

X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); KeyFactorykeyFactory = KeyFactory.getInstance("RSA"); PublicKeypublicKey = keyFactory.generatePublic(keySpec); returnpublicKey;

}

/**

* 将String类型私钥转换成PrivateKey类型

* @param key

* @return

* @throws Exception

*/

public static PrivateKeygetPrivateKey(String key) throws Exception {

byte[] keyBytes;

keyBytes = (new BASE64Decoder()).decodeBuffer(key);

PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactorykeyFactory = KeyFactory.getInstance("RSA"); PrivateKeyprivateKey = keyFactory.generatePrivate(keySpec); returnprivateKey;

}

}

需要在lib包里面导入m ai l.j ar

测试:

publicstaticvoid main(String[] args) {

RSAKeyMap rsa=new RSAKeyMap();

MapkeyMap;

String password="董迎顺123456";

System.out.println("即将加密的密码为:"+password);

try {

keyMap = rsa.initKey();

String publicKey= rsa.getPublicKey(keyMap);

System.out.println("分配的公钥为:"+publicKey);

String privateKey = rsa. getPrivateKey(keyMap);

System.out.println("分配的私钥为:"+privateKey);

//传入名文和公钥钥对数据进行RSA加密

String rsaPub=rsaEncoding(password, getPublicKey(publicKey));

System.out.println("加密后的密码为:"+rsaPub);

//传入RSA密文和私钥对数据进行解密

String password1=rsaDeEncoding(rsaPub,getPrivateKey(privateKey));

System.out.println("解密后密码为"+password1);

} catch (Exception e) {

e.printStackTrace();

}

文件加密与解密—Java课程设计报告

JAVA课程设计题目:文件的加密与解密 姓名: 学号: 班级: 日期:

目录 一、设计思路 (3) 二、具体实现 (3) 三、运行调试与分析讨论 (8) 四、设计体会与小结 (11) 五、参考文献 (12) 六、附录 (12)

一、设计思路 自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。目前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。 本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。 二、具体实现 本系统通过用户界面接收三个参数:明文文件、密文文件、口令。采用DES加密算法,密码分组链(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。因为CBC涉及到底层算法参数的解密密钥的传递,所以将明文文件中的字节块以密封对象(Sealed Object)的方式加密后,用对象流输出到密文文件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。口令的hash值作为产生密钥的参数。设计流程图如下所示: 文件加密与解密设计流程图

本系统中,包含Default,Shares,SecretKey,EncAndDec四个包共6个类组成。定义的几个参数:MAX_BUF_SIZE为每次从文件中读取的字节数,也是内存缓冲区的大小;加密算法为DES;加密模式是密码分组链(CBC)模式;分组填充方式是PKCS#5Padding。包和类结构图如下所示: 本课程设计,包和类结构图: 以下为包中的类的方法实现说明 Package Shares类结构图

java文件加密解密课程设计

软件学院 课程设计报告书 课程名称面向对象程序设计 设计题目文本文档的加密与解密 专业班级财升本12-1班 学号 1220970120 姓名王微微 指导教师徐娇月 2013年 1 月

1 设计时间 2013年1月14日-2013年1月18日 2 设计目的 面向对象程序设计是一门实践性很强的计算机专业基础课程。通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。 3 设计任务 对文件进行加密解密 4 设计内容 4.1 需求分析 (1)给定任意一个文本文件,进行加密,生成另一个文件。 (2)对加密后的文件还原。 4.2 总体设计 4.2.1 包的描述 导入了java.awt; java.awt.event; java.io; javax.swing等包。 4.2.2 类的描述 Myframe类;E1类。其中Myframe类继承Frame类;可以扩展Frame的功能并且可以实例化的多种功能,这个类也实现了ActionListener这个接口,它是Java中关于事件处理的一个接口,ActionListener用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed 方法。 4.3 页面设计

图4.3-1 显示页面 代码实现: addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });

如何运用加密技术保护Java源代码

如何运用加密技术保护Java源代码 Java程序的源代码很容易被别人偷看,只要有一个反编译器,任何人都可以分析别人的代码。本文讨论如何在不修改原有程序的情况下,通过加密技术保护源代码。 一、为什么要加密? 对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以。遗憾的是,Java程序的源代码很容易被别人偷看。只要有一个反编译器,任何人都可以分析别人的代码。Java的灵活性使得源代码很容易被窃取,但与此同时,它也使通过加密保护代码变得相对容易,我们唯一需要了解的就是Java的ClassLoader对象。当然,在加密过程中,有关Java Cryptography Extension(JCE)的知识也是必不可少的。 有几种技术可以“模糊”Java类文件,使得反编译器处理类文件的效果大打折扣。然而,修改反编译器使之能够处理这些经过模糊处理的类文件并不是什么难事,所以不能简单地依赖模糊技术来保证源代码的安全。 我们可以用流行的加密工具加密应用,比如PGP(Pretty Good Privacy)或GPG(GNU Privacy Guard)。这时,最终用户在运行应用之前必须先进行解密。但解密之后,最终用户就有了一份不加密的类文件,这和事先不进行加密没有什么差别。 Java运行时装入字节码的机制隐含地意味着可以对字节码进行修改。JVM每次装入类文件时都需要一个称为ClassLoader的对象,这个对象负责把新的类装入正在运行的JVM。JVM给ClassLoader一个包含了待装入类(比如https://www.360docs.net/doc/d28987430.html,ng.Object)名字的字符串,然后由ClassLoader负责找到类文件,装入原始数据,并把它转换成一个Class对象。 我们可以通过定制ClassLoader,在类文件执行之前修改它。这种技术的应用非常广泛??在这里,它的用途是在类文件装入之时进行解密,因此可以看成是一种即时解密器。由于解密后的字节码文件永远不会保存到文件系统,所以窃密者很难得到解密后的代码。 由于把原始字节码转换成Class对象的过程完全由系统负责,所以创建定制ClassLoader对象其实并不困难,只需先获得原始数据,接着就可以进行包含解密在内的任何转换。 Java 2在一定程度上简化了定制ClassLoader的构建。在Java 2中,loadClass的缺省实现仍旧负责处理所有必需的步骤,但为了顾及各种定制的类装入过程,它还调用一个新的findClass方法。 这为我们编写定制的ClassLoader提供了一条捷径,减少了麻烦:只需覆盖findClass,而不是覆盖loadClass。这种方法避免了重复所有装入器必需执行的公共步骤,因为这一切由loadClass负责。 不过,本文的定制ClassLoader并不使用这种方法。原因很简单。如果由默认的ClassLoader先寻找经过加密的类文件,它可以找到;但由于类文件已经加密,所以它不会

java文件加密课程设计

结业报告 课程名称:网络安全技术 设计题目:java实现文件加密 系别:***学院 专业:*************** 组员:**************************起止日期***************** 指导教师:***

摘要 目前世界范围内的信息安全问题越来越严重。解决信息安全问题涉及面很广,它包括技术,管理.制度,人员和法律等诸多方面,但最核心部分是密码技术。密码技术是实现一种变换,它使得对大量信息的保护变为对少量密钥的保护。 本次结业设计以文件的加密与解密问题为主要研究讨论方向。先对加密技术进行查找资料。然后对加密方法进行概述,而后对3DES加密进行详细介绍何分析,并对结业设计成果进行演示,最后附上代码。由于本次结业设计时间仓促外加能力有限,有诸多不足之处以及可能存在某些为发现错误还请批评指正。感谢之至。 关键词:加密解密密钥 3DES Abstract At present, the problem of information security is more and more serious in the world. To solve the problem of information security involves a wide range, including technology, management, system, personnel and law, etc., but the most important part is the password technology. Password technology is to achieve a transformation, which makes the protection of a large number of information into a small number of key protection. The graduation project to document encryption and decryption issues as the main research and discussion. First, the encryption technology to find information. Then the encryption method is outlined, and then the 3DES encryption for detailed analysis, and the completion of the design results are demonstrated, and finally attached to the code. Due to the limited capacity of the completion of this graduation project, there are many deficiencies and there may be some to find errors also please criticism. Thanks to.

Java方法加密与解密

我们在Web开发中,经常要保证密码的安全性,那么怎么对密码进行处理了?首先得进行加密吧!下面我介绍下Java提供的SHA加密方式; SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局(NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散列函数。正式名称为SHA 的家族第一个成员发布于1993年。然而人们给它取了一个非正式的名称SHA-0 以避免与它的后继者混淆。两年之后,SHA-1,第一个SHA 的后继者发布了。另外还有四种变体,曾经发布以提升输出的范围和变更一些细微设计:SHA-224, SHA-256, SHA-384 和SHA-512 (这些有时候也被称做SHA-2)。 [java]view plain copy 1.package com.chinadatapay.util; 2. 3.import java.security.MessageDigest; 4. 5./** 6. * SHA 加密算法 7. * @author DELL 8. * 9. */ 10. 11.public class SHAencrypt { 12. 13./** 14. * 定义加密方式 15. */ 16.private final static String KEY_SHA = "SHA"; 17.private final static String KEY_SHA1 = "SHA-1"; 18. 19./** 20. * 全局数组 21. */ 22.private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5" , 23."6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; 24. 25./**

Java课程设计之加密和解密

课程设计(论文)任务书 软件学院软件工程专业班 一、课程设计(论文)题目加密与解密 二、课程设计(论文)工作自年月日起至年月日止。 三、课程设计(论文) 地点: 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生巩固和提高Java编程技术 (2)培养学生掌握程序设计的基本思路和方法; (3)加强学生研发、调试程序的能力; (4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。 2.课程设计的任务及要求 1)任务: (1)设计GUI界面的Hannoi塔,用户可以通过拖动鼠标移动各个塔上的盘子,程序 也可以自动演示盘子的移动过程。; (2)有三个表示塔的对象,分别命名为A、B和C。A塔上有若干个盘子,盘子的大小 不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。用户可以用鼠标拖 动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。要求每次只能移 动一个盘子,在任何时候不允许大盘压在小盘的上面。 (3)用户也可以选择让程序自动演示。选择自动演示后,程序将以动画形式演示把A 塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。 2)创新要求: 在基本要求达到后,可进行创新设计,增加功能和游戏趣味性。 3)课程设计论文编写要求 (1)课程设计任务及要求 (2)需求分析 (3)设计思路--工作原理、功能规划 (4)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。 (4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。 (6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式) (7) 报告按规定排版打印,要求装订平整,否则要求返工; (8) 课设报告的装订顺序如下:封面---任务书---中文摘要---目录----正文---附录(代码

利用Java程序实现加密解密问题

第17卷 第5期2002年10月 内蒙古民族大学学报(自然科学版) Journal of I nner M ongolia U niv ersity for N ationalities Vol.17 No.5 Oct.2002利用Java程序实现加密解密问题y 王国忱1,赵 芳1,李亚娟2 (1 内蒙古民族大学理工学院,内蒙古通辽 028043;2 内蒙古通辽市通顺铝厂,内蒙古通辽 028000) 摘 要:主要介绍了一种用Java语言设计加密解密的方法. 关键词:Java;加密;解密 中图分类号:JP312JA 文献标识码:A 文章编号:1671 0185(2002)05-0410-03 Realize Encryption and Unencryption in Use of Java Program WANG Guo-chen1,ZH AO Fang1,LI Ya-juan2 (1 College o f Science and Eng ineering,Inner M ong olia U niversity for N ationalities,T ongliao028043,China; 2 T ong liao T ong shun A luminium F actory o f Inner M ongo lia,T ongliao028000,China) Abstract:Mainly describe a solution of encryption and unencry ption in use of Java. Key words:Jave;Encryption;U nencryption Java程序是建立在一系列的类之上,这些类刻画了程序所要处理的基本数据类型的行为.通过向这些类的对象发送信息,从而使这些对象进行相应的操作,这样就构成了Jav a程序. 已知一个文本加密解密问题,它遵循如下规则: (1)把明文中的所有字符倒过来,比如Glag to meet you!!变成!uoy teem ot galG!. (2)要求用户提供一个密钥(为一个正整数),设为key.设明文中字符的A SCII码值为x,把x和key相加,再通过一个可逆变换,映射成一个可打印的密文字符,设该字符的ASCII码值为y. 因为ASCI I编码表中,0x00~0x1F(0~31)的字符为设备控制字符,所以在变换过程中必须加以避免. 映射方法分析如下: 设n=(32+key)%128,则可以分成如下规程情况: 第一种情况: n<32,则if(x+key)%128<32 y=96+(x+key)%128; else y=(x+key)%128; 第二种情况: n>32,则if((x+key)%128

java课设加密与解密

JA V A 程序设计报告 ---------------------------------------------------------------------------------------------------------------------- ------------------加密与解密 辅导老师:冯艳君 学号:1103050403 姓名:卢雨情

目录 一课程设计总要求。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 二题目及要求。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 三程序设计思路。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。3 四程序代码。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。10 五总结。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。17

一课程设计总要求 本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,因此,开始设计前学生一定要先回顾以前所学的内容,明确本次作业设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。通过编写一个基于JA V A的应用系统综合实例,来掌握Java语言编程技巧。 二题目及要求 加密与解密 要求:采用图形用户界面 1、给定任意一个文本文件,进行加密,生成另一个文件。 2、对加密后的文件还原。 三程序设计思路 1 This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. 代码:public class FileEncrypterT extends javax.swing.JFrame { public static final int WIDTH = 550; public static final int HEIGHT = 200; 2 加密函数 输入: 要加密的文件,密码(由0-F组成,共48个字符,表示3个8位的密码)如: AD67EA2F3BE6E5ADD368DFE03120B5DF92A8FD8FEC2F0746 其中: AD67EA2F3BE6E5AD DES密码一 D368DFE03120B5DF DES密码二 92A8FD8FEC2F0746 DES密码三 输出: 对输入的文件加密后,保存到同一文件夹下增加了".tdes"扩展名的文件中。 代码:public static void main(String args[]) { FileEncrypter fe = new FileEncrypter(); fe.show(); } FileEncrypterT(){ this.setSize(WIDTH,HEIGHT); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screenSize = tk.getScreenSize(); this.setLocation((screenSize.width - WIDTH)/2, (screenSize.height - HEIGHT)/2); this.setTitle("文件加密器(TriDES)");

文件加密与解密—Java课程设计报告

文件加密与解密—Java课程设计报告

JAVA课程设计题目:文件的加密与解密 姓名: 学号: 班级: 日期: 指导老师 分数

目录 一、设计思路 (1) 二、具体实现 (1) 三、运行调试与分析讨论 (3) 四、设计体会与小结 (7) 五、参考文献 (8) 六、附录 (8)

一、设计思路 自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。目前,Java 已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。使用Java的安全机制设计和实现安全系统更具有重要的应用价值。 本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。 二、具体实现 本系统通过用户界面接收三个参数:明文文件、密文文件、口令。采用DES加密算法,密码分组链(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。因为CBC涉及到底层算法参数的解密密钥的传递,所以将明文文件中的字节块以密封对象(Sealed Object)的方式加密后,用对象流输出到密文文

件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。口令的hash值作为产生密钥的参数。设计流程图如下所示: 设计文件加密解密的界面 实现hash算法,用于产生口令的hash值 实现由口令hash值产生密钥的算法 实现文件加密算法加密按钮事件实现文件解密算法解密按钮事件 文件加密与解密设计流程图 本系统中,包含

java文件加密解密课程设计

课程设计报告书 课程名称面向对象程序设计 设计题目文本文档的加密与解密 2013年 1 月

1 设计时间 2013年1月14日-2013年1月18日 2 设计目的 面向对象程序设计是一门实践性很强的计算机专业基础课程。通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。 3 设计任务 对文件进行加密解密 4 设计内容 4.1 需求分析 (1)给定任意一个文本文件,进行加密,生成另一个文件。 (2)对加密后的文件还原。 4.2 总体设计 4.2.1 包的描述 导入了java.awt; java.awt.event; java.io; javax.swing等包。 4.2.2 类的描述 Myframe类;E1类。其中Myframe类继承Frame类;可以扩展Frame的功能并且可以实例化的多种功能,这个类也实现了ActionListener这个接口,它是Java中关于事件处理的一个接口,ActionListener用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的addActionListener 方法向该组件注册。在发生操作事件时,调用该对象的actionPerformed 方法。 4.3 页面设计

图4.3-1 显示页面 代码实现: addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } });

java实现AES加密和解密

Java实现AES加密和解密 经过三周的不懈努力,终于完成了AES对任意格式的文件加密和解密。现在将自己的学习经历记下来,纪念自己三周的付出。同时也感谢网上的各位大神的博客,让我学到了很多。 下面就将AES的各个构件的核心代码粘贴如下,每行代码都有详细的注释! package myAes; /* * 本类完成AES的加密和解密的流程 //内容参考:https://www.360docs.net/doc/d28987430.html,/xiaaiwu/article/details/42747229 * */ public class myAes { private byte State[][];// 明文的状态表 private byte Sbox[][];// S盒子 private byte iSbox[][];// 逆S盒子 private byte key[];//密钥 private int Nk;// 密钥长度 private int Nr;// 对不同的长度的密钥不同的轮数 private byte w[][];// 密钥调度表 private byte Rcon[][];// 轮常数表 private int Nb;// 明文列数

//构造函数 public myAes(byte[] keyBytes,int keySize) { this.Nb = 4;//只处理明文是128位为一组 if(keySize==128){ this.Nk=4; this.Nr=10; } else if (keySize==192) { //System.out.println("密钥长度位192位"); this.Nk=6; this.Nr=12; } else if (keySize==256) { this.Nk=8; this.Nr=14; } this.key = new byte[this.Nk * 4]; this.key = keyBytes; createSbox();//创建S盒子的方法createISbox();//创建S逆盒子的方法createRcon();//创建轮常数数组的方法keyExtend();//密钥扩展的方法 } // 初始化S盒子

Java 加密、解密PDF文档

Java 加密、解密PDF文档 本篇文章将介绍通过Java编程来设置PDF文档保护的方法。我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑;也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为可编辑状态。 使3用工具:Free Spire.PDF for Java V2.0.0(免费版) 关于jar文件引用 步骤1:在Java程序中新建一个文件夹可命名为Lib。下载安装包后,解压,将解压后的文件夹下的子文件夹lib中的Spire.Pdf.jar和https://www.360docs.net/doc/d28987430.html,mon.jar两个文件复制到新建的文件夹下,如下图: 步骤2:建好文件夹后,引用两个文件:选中这两个jar文件,点击鼠标右键,选择“Build Path”–“Add to Build Path”。如下图:

Java代码 【示例1】加密PDF文档 import java.util.EnumSet; import com.spire.pdf.PdfDocument; import com.spire.pdf.security.PdfEncryptionKeySize; import com.spire.pdf.security.PdfPermissionsFlags; public class EncryptPDF { public static void main(String[] args) { //创建PdfDocument实例 PdfDocument doc = new PdfDocument(); //加载PDF文件 doc.loadFromFile("sample.pdf"); //加密PDF文件 PdfEncryptionKeySize keySize = PdfEncryptionKeySize.Key_128_Bit; String openPassword = "123456";//打开文档时,仅用于查看文档 String permissionPassword = "test";//打开文档时,可编辑文档 EnumSet flags = EnumSet.of(PdfPermissionsFlags.Print, PdfPermissionsFlags.Fill_Fields); doc.getSecurity().encrypt(openPassword, permissionPassword, flags, keySize); //保存文件 doc.saveToFile("Encrypt.pdf"); doc.close();

DES加密解密Java代码

//DES加密:(1)生成密钥文件(2)利用密钥,加密文件(3)根据密钥,对加密的文件解密 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ScrollPaneConstants; public class DES { public static void main(String args[]) { DemoWindow1 dw = new DemoWindow1("DES加密程序"); dw.setBounds(dw.getToolkit().getScreenSize().width / 3, dw.getToolkit() .getScreenSize().height / 3, dw.getToolkit().getScreenSize().width / 3, dw.getToolkit() .getScreenSize().height / 3); dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); dw.setVisible(true);

Java课程设计报告 加密和解密

目录: 前言 (1) 一、题目分析 (2) 1.1课程设计的要求和内容(包括原始数据、技术要求、工作要求) (2) 1.2 团队任务分析 (2) 1.3相关知识介绍 (2) 二、概要设计 (3) 2.1抽象数据类型的定义 (3) 2.2各程序模块之间的层次(调用)关系 (4) 三、详细设计 (5) 3.1程序流程图 (5) 3.2图形用户界面模块 (6) 3.3加密操作模块 (7) 3.4解密操作模块 (7) 3.5文件保存模块 (7) 3.6文件选择模块 (8) 四、调试分析 (9) 4.1对设计与实现的回顾讨论和分析 (10) 4.2算法的时空分析 (11) 4.3经验和体会 (12) 五、测试结果 (12) 5.1加密 (12) 5.2解密 (15) 六、主要参考资料 .......................................................................................... - 16 - 七、附录......................................................................................................... - 16 -

前言 随着网络技术的不断发展,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。文件的加密主要是由加密算法实现,加密算法有多种,常见的有RSA、DES、MD5等。但是这些算法虽然原理简单,但具体实现起来却非常繁琐复杂,故而本程序设计对文件的加密使用的是最基础的异或加密算法。 Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。Java是一门很优秀的编程语言,是目前软件设计中极为健壮的编程语言。Java不仅可以用来开发大型的应用程序,而且特别适合于Internet的应用开发。Java确实具备了“一次写成,处处运行”的特点,所以,Java已经成为网络时代最重要的编程语言之一。本程序充分利用Java语言的特点,针对当下社会比较重视的文件加密,设计了本程序。 使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善, 满足了用户对文件安全性的需求。 关键词: JA V A ;加密;解密;

java处理zip压缩,加密,解密

import java.io.File; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.model.ZipParameters; import net.lingala.zip4j.util.Zip4jConstants; public class ZipUtil { public static void main(String[] args) { try { long startTime = System.currentTimeMillis(); // zip("e:\\test\\3333.pdf", "e:\\test\\", "123"); unZip("e:\\test\\333.zip", "e:\\test\\123", "123"); // unZip("D:\\地图.zip", "D:\\地图.jpg", "123"); System.out.print("total time:" + (System.currentTimeMillis()-startTime)); } catch (ZipException e) { e.printStackTrace(); } } /** * 压缩 * * @param srcFile 源目录 * @param dest 要压缩的目录 * @param passwd 密码不是必填 * @throws ZipException 异常 */ public static void zip(String srcFile, String dest, String passwd) throws ZipException { File srcfile = new File(srcFile); //创建目标文件 String destname = buildDestFileName(srcfile, dest); ZipParameters par = new ZipParameters(); par.setCompressionMethod(https://www.360docs.net/doc/d28987430.html,P_DEFLATE); par.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); if (passwd != null) { par.setEncryptFiles(true); par.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD); par.setPassword(passwd.toCharArray()); } ZipFile zipfile = new ZipFile(destname); if (srcfile.isDirectory()) { zipfile.addFolder(srcfile, par);

JAVA课程设计 文件加密解密

辽宁工业大学 JA V A程序设计课程设计(论文)题目:文件加密解密 院(系):软件学院 专业班级:软件工程 学号: 学生姓名: 指导教师:王彦华 教师职称:讲师 起止时间: 2012.6.18至2012.7.1

程序设计专题(报告)任务及评语

目录 第1章课程设计的目的与要求 (1) 1.1 课程设计目的 (1) 1.2 课程设计的实验环境 (1) 1.3 课程设计的预备知识 (1) 1.4 课程设计要求 (1) 第2章课程设计内容 (2) 2.1课程设计主要内容 (2) 2.2概要设计 (2) 2.2.1功能分析 (2) 2.2.2自定义类说明 (3) 2.3详细设计 (4) 2.3.1界面设计 (4) 2.4程序实现 (6) 2.4.1源码分析 (6) 2.4.2程序运行情况 (11) 2.4.3程序异常处理 (12) 第3章课程设计总结 (14) 参考资料15

第1章课程设计的目的与要求 1.1 课程设计目的 《JA V A程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JA V A程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。 1.2 课程设计的实验环境 硬件要求能运行Windows 9.X操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。 1.3 课程设计的预备知识 熟悉JAVA语言及ECLIPSE开发工具。 1.4 课程设计要求 按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JA V A程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。

java加密解密算法

加密算法分类: 只能加密:SHA MD5 既能加密也能解密: 对称:DES RC4 非对称:RSA 非对称加密技术开销比较大,不适合大文本的加密。 SHA加密算法 SHA加密算法用途 数字签名、数字时间戳、数字证书 SHA加密原理以及流程 在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串位。SHA1算法只接受位作为输入。假设我们对字符串”abc”产生消息摘要(也就是加密)。首先,我们将它转换成位字符串如下: 01100001 01100010 01100011 ‘a’=97 ‘b’=98 ‘c’=99 这个位字符串的长度为24。下面我们需要5个步骤来计算SHA。 ①补位 消息必须进行补位,以使其长度在对512取模以后的余数是448,也就是说,(补位后的消息长度)len%512=448。即使长度已经满足对512取模后余数是448,补位也必须要进行。补位是这样进行的:先补一个1,然后再补0,直到长度满足对512取模后余数是448.总而言之,补位是至少补一位,最多补512位。还是以前面的“abc” 为例显示补位过程。 原始信息为:01100001 01100010 01100011 补位第一步:01100001 01100010 01100011 1(首先补一个1) 补位第二步:01100001 01100010 01100011 10....0(补423个0) ②补长度 所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常一个64位的数据来表示原始消息的长度。在进行了补长度的操作以后,整个消息就变成下面这样了。如果原始的消息长度超过了512,我们需要将它补成512的倍数。然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。

基于DES算法的数据文件加密解密的java编程实现

基于DES算法的数据文件加密/解密的java编程实现 1 课题背景和意义 据记载,公元前400年,古希腊人发明了置换密码。1881年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。 随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家标准局公布实施了“美国数据加密标准(DES)”,民间力量开始全面介入密码学的研究和应用中,采用的加密算法有DES、RSA、SHA等。随着对加密强度需求的不断提高,近期又出现了AES、ECC等。我国也相应提出了自己国家的ECC、SCB2、SCH 等加密算法。 使用密码学可以达到以下目的: 1.保密性:防止用户的标识或数据被读取。 2.数据完整性:防止数据被更改。 3.身份验证:确保数据发自特定的一方。 随着计算机和通信网络的广泛应用,信息的安全性已经受到人们的普遍重视。信息安全已不仅仅局限于政治,军事以及外交领域,而且现在也与人们的日常生活息息相关。现在,密码学理论和技术已得到了迅速的发展,它是信息科学和技术中的一个重要研究领域。在近代密码学上值得一提的大事有两件:一是1977年美国国家标准局正式公布实施了美国的数据加密标准(DES),公开它的加密算法,并批准用于非机密单位及商业上的保密通信。密码学的神秘面纱从此被揭开。二是Diffie和Hellman联合写的一篇文章“密码学的新方向”,提出了适应网络上保密通信的公钥密码思想,拉开了公钥密码研究的序幕。 DES(Data Encryption Standard)是IBM公司于上世纪1977年提出的一种数据加密算法。在过去近三十年的应用中,还无法将这种加密算法完全、彻底地破解掉。而且这种算法的加解密过程非常快,至今仍被广泛应用,被公认为安全的。虽然近年来由于硬件技术的飞速发展,破解DES已经不是一件难事,但学者们似乎不甘心让这样一个优秀的加密算法从此废弃不用,于是在DES的基础上有开发了双重DES(DoubleDES,DDES)和三重DES(Triple DES,TDES)。 在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡(IC 卡)、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡持卡人的PIN码加密传输,IC卡与POS间的双向认证、金融交易数据包的MAC 校验等,均用到DES算法。DES加密体制是ISO颁布的数据加密标准。 因此研究DES还是有非常重要的意义。 1.1 课题目标和意义 题目:利用DES的加密算法实现针对二进制数据(文件)的加/解密软件工具。采用java语言,软件版本:jdk1.6.0, JCreator Pro v3.5.013汉化版,平台:Windows XP 意义:了解DES加密算法及原理,掌握其基本应用,利用java编程实现。

相关文档
最新文档