ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:16.37KB ,
资源ID:8965318      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8965318.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java实现文件的RSA和DES加密算法.docx)为本站会员(聆听****声音)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Java实现文件的RSA和DES加密算法.docx

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 中的实现根据以上阐述说明,对于要加密的数据量大时,一般采用 DES 对称加密算法.对于需要实现签名的数据,则要采用 RSA 非对称加密算法.以下分别介绍这两种算法在 JAVA 的实现过程.二、java 实现 DES 加密算法为了实现一对密钥对整个项目所有加密解密文件都适用的方法,采用先生成一对密钥.保存到 xml 文件中,以后获得私匙和公钥只需要从 xml 文件中取得就可以了./* 把成生的一对密钥保存到

5、DesKey.xml 文件中*/public static void saveDesKey() try SecureRandom sr = new SecureRandom();/为我们选择的 DES 算法生成一个 KeyGenerator 对象KeyGenerator kg = KeyGenerator.getInstance (DES ); kg.init (sr);FileOutputStream fos = new FileOutputStream(C:/DesKey.xml); ObjectOutputStream oos = new ObjectOutputStream(fos);

6、/生成密钥Key key = kg.generateKey(); oos.writeObject(key); oos.close(); catch (Exception e) e.printStackTrace();/* 获得 DES 加密的密钥。在交易处理的过程中应该定时更* 换密钥。需要 JCE 的支持,如果 jdk 版本低于 1.4,则需要* 安装 jce-1_2_2 才能正常使用。* returnKey返回对称密钥*/public static Key getKey() Key kp = null;try String fileName = conf/DesKey.xml; Input

7、Stream is = DesUtil.class.getClassLoader().getResourceAsStream(fileName); ObjectInputStream oos = new ObjectInputStream(is); kp = (Key) oos.readObject();oos.close(); catch (Exception e) e.printStackTrace();return kp;获取密钥方法如下:文件采用 DES 算法加密文件/* 文件 file 进行加密并保存目标文件 destFile 中* param file* 要加密的文件 如 c:/t

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

9、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* 已加密的文件 如 c:/加密后文件.txt* param destFile* 解密后存放的文件名 如

10、 c:/ test/解密后文件.txt*/public static void decrypt(String file, String dest) throws Exception Cipher cipher = Cipher.getInstance(DES); cipher.init(Cipher.DECRYPT_MODE, getKey(); InputStream is = new FileInputStream(file);OutputStream out = new FileOutputStream(dest); CipherOutputStream cos = new Cipher

11、OutputStream(out, cipher); byte buffer = new byte1024;int r;while (r = is.read(buffer) = 0) cos.write(buffer, 0, r);cos.close();out.close();is.close();三、java 实现 RSA 加密算法同样为了实现一对密钥对整个项目所有加密解密文件都适用的方法,采用先生成一对密钥.保存到 xml 文件中,以后获得私匙和公钥只需要从 xml 文件中取得就可以了.但实现方法不一样了./* 把成生的一对密钥保存到 RSAKey.xml 文件中*/public voi

12、d saveRSAKey() try SecureRandom sr = new SecureRandom();KeyPairGenerator kg = KeyPairGenerator.getInstance(RSA,new org.bouncycastle.jce.provider.BouncyCastleProvider();/注意密钥大小最好为 1024,否则解密会有乱码情况. kg.initialize(1024, sr);FileOutputStream fos = new FileOutputStream(C:/RSAKey.xml); ObjectOutputStream o

13、os = new ObjectOutputStream(fos);/生成密钥oos.writeObject(kg.generateKeyPair(); oos.close(); catch (Exception e) e.printStackTrace();注意:需要从 http:/www.bouncycastle.org 下载 bcprov-jdk14-137.jar 包./* 获得 RSA 加密的密钥。* returnKeyPair 返回对称密钥*/public static KeyPair getKeyPair() /产生新密钥对KeyPair kp;try String fileNam

14、e = conf/RASKey.xml; InputStream is = FileUtils.class.getClassLoader().getResourceAsStream(fileName); ObjectInputStream oos = new ObjectInputStream(is); kp = (KeyPair) oos.readObject();oos.close(); catch (Exception e) throw new EprasRuntimeException(读取加密文件出错., e);return kp;获取密钥方法如下:文件采用 RSA 算法加密文件/*

15、 文件 file 进行加密并保存目标文件 destFile 中* param srcFileName* 要加密的文件 如 c:/test/srcFile.txt* param destFileName* 加密后存放的文件名 如 c:/加密后文件.txt*/public static void encryptFile(String srcFileName, String destFileName) throws Exception OutputStream outputWriter = null; InputStream inputReader = null; try Cipher cipher

16、 = Cipher.getInstance(RSA/ECB/PKCS1Padding,new org.bouncycastle.jce.provider.BouncyCastleProvider(); byte buf = new byte100;int bufl;cipher.init(Cipher.ENCRYPT_MODE, getKeyPair().getPublic(); outputWriter = new FileOutputStream(destFileName); inputReader = new FileInputStream(srcFileName);while (buf

17、l = 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;

18、finally try if (outputWriter != null) outputWriter.close();if (inputReader != null) inputReader.close(); catch (Exception e) /* 文件 file 进行加密并保存目标文件 destFile 中* param srcFileName* 已加密的文件 如 c:/加密后文件.txt* param destFileName* 解密后存放的文件名 如 c:/ test/解密后文件.txt*/public static void decryptFile(String srcFileN

19、ame, String destFileName) throws Exception OutputStream outputWriter = null; InputStream inputReader = null; try Cipher cipher = Cipher.getInstance(RSA/ECB/PKCS1Padding,new org.bouncycastle.jce.provider.BouncyCastleProvider(); byte buf = new byte128;int bufl;cipher.init(Cipher.DECRYPT_MODE, getKeyPa

20、ir().getPrivate();outputWriter = new FileOutputStream(destFileName); inputReader = new FileInputStream(srcFileName); while (bufl = 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

21、 = (byte) bufi;encText = cipher.doFinal(newArr); outputWriter.write(encText);文件采用 RSA 算法解密文件outputWriter.flush(); catch (Exception e) throw e; finally try if (outputWriter != null) outputWriter.close();if (inputReader != null) inputReader.close(); catch (Exception e) 四、总结上述两种加密方法通过测试发现如果对于大文件加密采用 RSA 算法执行速度要非常非常慢;如果对加密文件密码安全性要求不高,可以采用 DES 算法,速度会有明显的提升.

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2