1 下面用DES对称加密算法(设定一个密钥,然后对所有的数据进行加密)来简单举个例子。2

3 首先,生成一个密钥KEY。4 我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它,谁就能解开我们的类文件。代码参考如下:5 packagecom.neusoft.jiami;6 importJava.io.File;7 importjava.io.FileOutputStream;8 importjava.security.SecureRandom;9 importjavax.crypto.KeyGenerator;10 importjavax.crypto.SecretKey;11 classKey {12 privateString keyName;13 publicKey(String keyName) {14 this.keyName =keyName;15 }16 public void createKey(String keyName) throwsException {17 //创建一个可信任的随机数源,DES算法需要

18 SecureRandom sr = newSecureRandom();19 //用DES算法创建一个KeyGenerator对象

20 KeyGenerator kg = KeyGenerator.getInstance("DES");21 //初始化此密钥生成器,使其具有确定的密钥长度

22 kg.init(sr);23 //生成密匙

24 SecretKey key =kg.generateKey();25 //获取密钥数据

26 byte rawKeyData[] =key.getEncoded();27 //将获取到密钥数据保存到文件中,待解密时使用

28 FileOutputStream fo = new FileOutputStream(newFile(keyName));29 fo.write(rawKeyData);30 }31 public static voidmain(String args[]) {32 try{33 new Key("key.txt");34 } catch(Exception e) {35 e.printStackTrace();36 }37 }38 }39 第二步,对我们所要进行加密的类文件进行加密。40 比如我有一个DigestPass类,已经被正常编译好生成DigestPass.class文件。此时,这个类文件是任何人都可以用的。因为系统的类加载器可以自动的加载它。那么下一步,我们要做的就是把这个类文件加密。使系统的类加载器无法读取到正确的字节码文件。参考代码如下:41 packagecom.neusoft.jiami;42 importjava.io.File;43 importjava.io.FileInputStream;44 importjava.io.FileOutputStream;45 importjava.security.SecureRandom;46 importjavax.crypto.Cipher;47 importjavax.crypto.SecretKey;48 importjavax.crypto.SecretKeyFactory;49 importjavax.crypto.spec.DESKeySpec;50 public classJiaMi {51 public static void main(String[] args) throwsException {52 //DES算法要求有一个可信任的随机数源

53 SecureRandom sr = newSecureRandom();54 //获得密匙数据

55 FileInputStream fi = new FileInputStream(new File("key.txt"));56 byte rawKeyData[] = new byte[fi.available()];57 fi.read(rawKeyData);58 fi.close();59 //从原始密匙数据创建DESKeySpec对象

60 DESKeySpec dks = newDESKeySpec(rawKeyData);61 //创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象

62 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);63 //Cipher对象实际完成加密操作

64 Cipher cipher = Cipher.getInstance("DES");65 //用密匙初始化Cipher对象

66 cipher.init(Cipher.ENCRYPT_MODE, key, sr);67 //现在,获取要加密的文件数据

68 FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));69 byte data[] = new byte[fi2.available()];70 fi2.read(data);71 fi2.close();72 //正式执行加密操作

73 byte encryptedData[] =cipher.doFinal(data);74 //用加密后的数据覆盖原文件

75 FileOutputStream fo = new FileOutputStream(new File("DigestPass.class"));76 fo.write(encryptedData);77 fo.close();78 }79 }80 第三步,用自定义的CLASSLOADER进行加载。参考代码如下:81 packagecom.neusoft.jiami;82 importjava.io.File;83 importjava.io.FileInputStream;84 importjava.io.FileOutputStream;85 importjava.security.SecureRandom;86 importjavax.crypto.Cipher;87 importjavax.crypto.SecretKey;88 importjavax.crypto.SecretKeyFactory;89 importjavax.crypto.spec.DESKeySpec;90 importcom.neusoft.classloader.MyClassLoader;91 public classJieMi {92 public static void main(String[] args) throwsException {93 //DES算法要求有一个可信任的随机数源

94 SecureRandom sr = newSecureRandom();95 //获得密匙数据

96 FileInputStream fi = new FileInputStream(new File("key.txt"));97 byte rawKeyData[] = new byte[fi.available()];//= new byte[5];

98 fi.read(rawKeyData);99 fi.close();100 //从原始密匙数据创建一个DESKeySpec对象

101 DESKeySpec dks = newDESKeySpec(rawKeyData);102 //创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象

103 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);104 //Cipher对象实际完成解密操作

105 Cipher cipher = Cipher.getInstance("DES");106 //用密匙初始化Cipher对象

107 cipher.init(Cipher.DECRYPT_MODE, key, sr);108 //现在,获取数据并解密

109 FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));110 byte encryptedData[] = new byte[fi2.available()];111 fi2.read(encryptedData);112 fi2.close();113 //正式执行解密操作

114 byte decryptedData[] =cipher.doFinal(encryptedData);115 //这时把数据还原成原有的类文件116 //FileOutputStream fo = new FileOutputStream(new117 //File("DigestPass.class"));118 //fo.write(decryptedData);119 //用解密后的数据加载类并应用

120 MyClassloader mcl = new MyClassloader("E:/");121 Class cl = mcl.loadClass(decryptedData, "com.neusoft.jiami.DigestPass");122 DigestPass dp =cl.newInstance();123 }124 }

java des对称加密_JAVA加密解密DES对称加密算法相关推荐

  1. Java 3desede加解密_JAVA加解密11-对称加密算法-DES以及DESede算法

    一.简述 对称加密算法就是能将数据加解密.加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密. DES是美国国家标准研究所提出的算法.因为加解密的数据安全性和密钥长度成正比.des ...

  2. java对时间使用des加密_Java如何使用DES加密对象?

    本示例演示使用DES算法加密对象.加密对象后,我们将其存储在文件中,该文件将在下一个示例中解密,该如何使用DES解密对象.package org.nhooo.example.crypto; impor ...

  3. java对excel加密_Java 加密、解密Excel文档

    一.概述 本文介绍通过Java程序来实现Excel文档加密以及解密的方法,包括对Excel工作簿加密.解密,对指定工作表加密.解密.程序中使用了免费版Java Excel类库(Free Spire.X ...

  4. java word 加密_java 加密解密WORD文档

    对一些重要文档,我们为保证其文档内容不被泄露,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件.下面介绍了一种比较简单的方法给Word文件添加密码保护以及如何给已加密的Word文件取消密 ...

  5. java pgp 加密_java – 如何解密签名的pgp加密文件?

    如何使用BouncyCastle Java API解密和验证使用PGP加密的文件? 解决方法: 加密代码: private static void encryptFile(OutputStream o ...

  6. java修改ppt格式_Java 加密、解密PPT文档

    文档加密常通过设置文档打开密码.启用文档编辑时的权限密码等方式:而解密则通过删除原有文档的密码或在此基础上重置新的密码.以下文章内容,将通过Java程序来实现通过以上方式来加密.解密PPT文档. 使用 ...

  7. java word 加密_Java 加密Word文档

    创建Maven项目程序,通过maven仓库下载导入.以IDEA为例,新建Maven项目,在pom.xml文件中配置maven仓库路径,并指定spire.cloud.sdk的依赖,如下: com.e-i ...

  8. 1、【java数据安全】数据安全之加密解密(base64、MD、SHA、DES、AES、IDEA、PBE、DH、RSA、EIGamal)、数字签名(DSA、ECDSA)和数字证书介绍、应用示例详细介绍

    java数据安全 系列文章 1.[java数据安全]数据安全之加密解密(base64.MD.SHA.DES.AES.IDEA.PBE.DH.RSA.EIGamal).数字签名(DSA.ECDSA)和数 ...

  9. java des3加密_JAVA加密算法(3)- 对称加密算法(DES、3DES、AES)

    对称加密算法概念 加密密钥和解密密钥相同,大部分算法加密揭秘过程互逆. 特点:算法公开.(相比非对称加密)计算量小.加密速度快.效率高. 弱点:双方都使用同样的密钥,安全性得不到保证. 常用对称加密算 ...

最新文章

  1. JavaEE(14) - JPA关联映射
  2. 《你不可不知的50个建筑学知识》之哥特式建筑
  3. Android初始化过程
  4. 如果当初学习编程时能有人给我这些忠告该多好
  5. 2017年第10批 手机号正则表达式
  6. 使用OpenCV提取不同颜色物体
  7. 使用Firebase、Angular 8和ASP.NET Core 3.1保护网站
  8. ArcGIS操作小技巧(六)之Network Analyst工具条不能使用的解决方法
  9. (四)通用定时器的定时功能(使用中断)
  10. 高级人才、专业技术人才、技能人才 目录 1. 高级人才, 1 1.1. 专业技术人才 2 2. 专业技术人才 2 3. 高技能人才 3 1.高级人才, 可迁入本市市区落户,其配偶、未婚子女(含离
  11. .NET MVC4 本地正常 部署 服务器错误
  12. 使用FileZilla搭建简单的FTP
  13. 360急速浏览器有道词典屏幕取词问题
  14. C#——窗体程序,模拟高温高压锅炉降压处理
  15. 使用ftp访问资源管理器托拽文件下载出现“当前的安全设置不允许从该位置下载文件”提示
  16. 利用python实现蚂蚁森林自动偷能量
  17. Win7 开机优化系列-上篇
  18. 20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业
  19. ODBC学习笔记—SQLSetStmtAttr
  20. java马士兵网络编程_学习笔记-马士兵java - 网络编程

热门文章

  1. 前端学习(1751):前端调试值之编辑源并同步到本地文件
  2. 前端学习(1697):前端系列javascript之原型
  3. java面试题40 当编译并运行下面程序时会发生什么结果()
  4. 第六十四期:微软将不再把 .NET Framework API 移植到 .NET Core 3.0
  5. 玩转oracle 11g(19):ora-00020和64位数据库安装32为plsql
  6. 根据父类id查询所有的父级_父类子类抽象类,super final 重写方法,搞懂继承中复杂的知识点...
  7. stylus之选择器(Selectors)
  8. qldump 备份所有表_MySQL中的备份和恢复是怎样执行的?
  9. Gym - 100543L
  10. 【市场调研与分析】Intel发力移动安全领域——By Me at 20140613