Java实现文件的RSA和DES加密_第1页
Java实现文件的RSA和DES加密_第2页
Java实现文件的RSA和DES加密_第3页
Java实现文件的RSA和DES加密_第4页
Java实现文件的RSA和DES加密_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java实现文件的RSA和DES加密算法一、 基础知识 根据密钥类型不同将现代密码技术分为两类:对称加密算法(秘密钥匙加密)和非对称加密算法(公开密钥加密)。对称钥匙加密系统是加密和解密均采用同一把秘密钥匙,而且通信双方都必须获得这把钥匙,并保持钥匙的秘密。非对称密钥加密系统采用的加密钥匙(公钥)和解密钥匙(私钥)是不同的。1.1 对称加密算法对称加密算法用来对敏感数据等信息进行加密,常用的算法包括:DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密

2、,强度更高。AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高; 1.2 对称算法常见的非对称加密算法如下:RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。1.3 加密算法的选择前面简单介绍了各种对称和非对称加密算法,那我们在实际使用的过程中究竟该使用哪一种比较好呢?我

3、们应该根据自己的使用特点来确定,由于非对称加密算法的运行速度比对称加密算法的速度慢很多,当我们需要加密大量的数据时,建议采用对称加密算法,提高加解密速度。对称加密算法不能实现签名,因此签名只能非对称算法。由于对称加密算法的密钥管理是一个复杂的过程,密钥的管理直接决定着他的安全性,因此当数据量很小时,我们可以考虑采用非对称加密算法。在实际的操作过程中,我们通常采用的方式是:采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。如果在选定了加密算法后,那采用多少位的密钥呢?一般来说,密钥越长,

4、运行的速度就越慢,应该根据的我们实际需要的安全级别来选择,一般来说,RSA建议采用1024位的数字,ECC建议采用160位,AES采用128为即可。1.4 JAVA中的实现根据以上阐述说明,对于要加密的数据量大时,一般采用DESJAVA的实现过程.二、 java实现DES加密算法为了实现一对密钥对整个项目所有加密解密文件都适用的方法,采用先生成一对密钥.保存到xml文件中,以后获得私匙和公钥只需要从xml文件中取得就可以了./*/public static void saveDesKey()try SecureRandom sr = new SecureRandom();/为我们选择的DES算

5、法生成一个KeyGenerator对象tance ("DES" );kg.init (sr);FileOutputStream fos = new FileOutputStream("C:/DesKey.xml"); ObjectOutputStream oos = new ObjectOutputStream(fos);/生成密钥Key key = kg.generateKey(); oos.writeObject(key); oos.close(); catch (Exception e) e.printStackTrace();获取密钥方法如下:/

6、* 获得DES加密的密钥。在交易处理的过程中应该定时更* 换密钥。需要JCE的支持,如果jdk版本低于1.4,则需要* 安装jce-1_2_2才能正常使用。 * return Key 返回对称密钥 */public static Key getKey() Key kp = null;try String fileName = "conf/DesKey.xml"InputStream is = DesUtil.class.getClassLoader().getResourceAsStream(fileName);ObjectInputStream oos = new Obj

7、ectInputStream(is);kp = (Key) oos.readObject();oos.close(); catch (Exception e) e.printStackTrace();return kp;文件采用DES算法加密文件/*  * 文件file进行加密并保存目标文件destFile中  * param file  *            要加密的文件 如  * param destFile  * &

8、#160;          加密后存放的文件名 如c:/加密后文件.txt  */public static void encrypt(String file, String destFile) throws Exception stance("DES");cipher.init(Cipher.ENCRYPT_MODE, getKey();InputStream is = new FileInputStream(file);OutputStream out = new Fi

9、leOutputStream(dest);CipherInputStream cis = new CipherInputStream(is, cipher);byte buffer = new byte1024;int r;while (r = cis.read(buffer) > 0) out.write(buffer, 0, r);cis.close();is.close();out.close();文件采用DES算法解密文件/*  * 文件file进行加密并保存目标文件destFile中  * param file  *  

10、0;         已加密的文件 如c:/加密后文件.txt  * param destFile  *            解密后存放的文件名 如c:/ test/解密后文件.txt  */public static void decrypt(String file, String dest) throws Exception e("DES");ciph

11、er.init(Cipher.DECRYPT_MODE, getKey();InputStream is = new FileInputStream(file);OutputStream out = new FileOutputStream(dest);CipherOutputStream cos = new CipherOutputStream(out, cipher);byte buffer = new byte1024;int r;while (r = is.read(buffer) >= 0) cos.write(buffer, 0, r);cos.close();out.clo

12、se();is.close(); 三、 java实现RSA加密算法同样为了实现一对密钥对整个项目所有加密解密文件都适用的方法,采用先生成一对密钥.保存到xml文件中,以后获得私匙和公钥只需要从xml文件中取得就可以了.但实现方法不一样了./* 把成生的一对密钥保存到RSA*/public void saveRSAKey() try SecureRandom sr = new SecureRandom();KeyPairGenerator kg = KeyPairGenerator.getInstance("RSA",new org.bouncycastle.jce

13、.provider.BouncyCastleProvider();/注意密钥大小最好为1024,否则解密会有乱码情况.kg.initialize(1024, sr);FileOutputStream fos = new FileOutputStream("C:/RSAKey.xml");ObjectOutputStream oos = new ObjectOutputStream(fos);/生成密钥oos.writeObject(kg.generateKeyPair();oos.close(); catch (Exception e) e.printStackTrace(

14、);注意:需要从下载包.获取密钥方法如下:/* 获得RSA加密的密钥。 * return KeyPair返回对称密钥 */public static KeyPair getKeyPair() /产生新密钥对KeyPair kp;try String fileName = "conf/RASKey.xml"InputStream is = FileUtils.class.getClassLoader().getResourceAsStream(fileName);ObjectInputStream oos = new ObjectInputStream(is);kp = (K

15、eyPair) oos.readObject();oos.close(); catch (Exception e) throw new EprasRuntimeException("读取加密文件出错.", e);return kp;文件采用RSA算法加密文件/*  * 文件file进行加密并保存目标文件destFile中  * param srcFileName  *            要加密的文件 如  * param

16、destFileName  *            加密后存放的文件名 如c:/加密后文件.txt  */public static void encryptFile(String srcFileName,String destFileName) throws Exception OutputStream outputWriter = null;InputStream inputReader = null;try Cipher cipher = Cipher.ge

17、tInstance("RSA/ECB/PKCS1Padding",new vider.BouncyCastleProvider();byte buf = new byte100;int bufl;cipher.init(Cipher.ENCRYPT_MODE, getKeyPair().getPublic();outputWriter = new FileOutputStream(destFileName);inputReader = new FileInputStream(srcFileName);while (bufl =

18、 inputReader.read(buf) != -1) byte encText = null;byte newArr = null;if (buf.length = bufl) newArr = buf; else newArr = new bytebufl;for (int i = 0; i < bufl; i+) newArri = (byte) bufi;encText = cipher.doFinal(newArr);outputWriter.write(encText);outputWriter.flush(); catch (Exception e) throw e;

19、finally try if (outputWriter != null) outputWriter.close();if (inputReader != null) inputReader.close(); catch (Exception e) if (inputReader != null) inputReader.close(); catch (Exception e) 文件采用RSA算法解密文件/*  * 文件file进行加密并保存目标文件destFile中  * param srcFileName  *    &

20、#160;       已加密的文件 如c:/加密后文件.txt  * param destFileName  *            解密后存放的文件名 如c:/ test/解密后文件.txt  */public static void decryptFile(String srcFileName,String destFileName) throws Exception OutputStre

21、am outputWriter = null;InputStream inputReader = null;try Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding",new vider.BouncyCastleProvider();byte buf = new byte128;int bufl;cipher.init(Cipher.DECRYPT_MODE, getKeyPair().getPrivate();outputWriter = new FileOutputStream(destFileName);inputReader = new FileInputStream(srcF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论