1.加密算法的类图结构

2.源代码

  2.1代码运行截图

  

  2.2代码的目录结构

  

  2.3具体代码

MethodFactory.java

  

  1. package jiami;
  2.  
  3. public interface MethodFactory {
  4. public Method produceMethod();
  5. }

DESFactory.java

  1. package jiami;
  2.  
  3. public class DESFactory implements MethodFactory {
  4. public DES produceMethod() {
  5. System.out.println("使用DES算法");
  6. return new DES();
  7. }
  8. }

IDEAFactory.java

  1. package jiami;
  2.  
  3. public class IDEAFactory implements MethodFactory {
  4. public IDEA produceMethod() {
  5. System.out.println("使用IDEA算法");
  6. return new IDEA();
  7. }
  8. }

Method.java

  1. package jiami;
  2.  
  3. public interface Method {
  4. public abstract void work(String str, String password);
  5. }

DES.java

  1. package jiami;
  2.  
  3. import javax.crypto.Cipher;
  4. import javax.crypto.KeyGenerator;
  5. import javax.crypto.SecretKey;
  6.  
  7. public class DES implements Method {
  8.  
  9. public void work(String str, String password) {
  10. String codeStringBegin = "信1605-320163432 张运涛"; // 要加密的明文
  11. String codeStringEnd = null; // 加密后的密文
  12. String decodeString = null; // 密文解密后得到的明文
  13. System.out.println("要加密的明文:" + codeStringBegin);
  14. String cipherType = "DESede"; // 加密算法类型,可设置为DES、DESede、AES等字符串
  15. try {
  16. // 获取密钥生成器
  17. KeyGenerator keyGen = KeyGenerator.getInstance(cipherType);
  18. // 初始化密钥生成器,不同的加密算法其密钥长度可能不同
  19. keyGen.init(112);
  20. // 生成密钥
  21. SecretKey key = keyGen.generateKey();
  22.  
  23. // 得到密钥字节码
  24. byte[] keyByte = key.getEncoded();
  25. // 输出密钥的字节码
  26. System.out.println("密钥是:");
  27. for (int i = 0; i < keyByte.length; i++) {
  28. System.out.print(keyByte[i] + ",");
  29. }
  30. System.out.println("");
  31. // 创建密码器
  32. Cipher cp = Cipher.getInstance(cipherType);
  33. // 初始化密码器
  34. cp.init(Cipher.ENCRYPT_MODE, key);
  35. System.out.println("要加密的字符串是:" + codeStringBegin);
  36. byte[] codeStringByte = codeStringBegin.getBytes("UTF8");
  37. System.out.println("要加密的字符串对应的字节码是:");
  38. for (int i = 0; i < codeStringByte.length; i++) {
  39. System.out.print(codeStringByte[i] + ",");
  40. }
  41. System.out.println("");
  42. // 开始加密
  43. byte[] codeStringByteEnd = cp.doFinal(codeStringByte);
  44. System.out.println("加密后的字符串对应的字节码是:");
  45. for (int i = 0; i < codeStringByteEnd.length; i++) {
  46. System.out.print(codeStringByteEnd[i] + ",");
  47. }
  48. System.out.println("");
  49. codeStringEnd = new String(codeStringByteEnd);
  50. System.out.println("加密后的字符串是:" + codeStringEnd);
  51. System.out.println("");
  52. // 重新初始化密码器
  53. cp.init(Cipher.DECRYPT_MODE, key);
  54. // 开始解密
  55. byte[] decodeStringByteEnd = cp.doFinal(codeStringByteEnd);
  56. System.out.println("解密后的字符串对应的字节码是:");
  57. for (int i = 0; i < decodeStringByteEnd.length; i++) {
  58. System.out.print(decodeStringByteEnd[i] + ",");
  59. }
  60. System.out.println("");
  61. decodeString = new String(decodeStringByteEnd);
  62. System.out.println("解密后的字符串是:" + decodeString);
  63. System.out.println("");
  64. } catch (Exception e) {
  65. e.printStackTrace();
  66. }
  67. }
  68.  
  69. public static void main(String[] args) {
  70. // TODO Auto-generated method stub
  71. System.out.println("DES加密算法");
  72. DES des = new DES();
  73. try {
  74. des.work("8787878787878787", "0E329232EA6D0D73");
  75.  
  76. } catch (Exception e) {
  77. System.out.println(e.getMessage());
  78. }
  79. }
  80.  
  81. }

IDEA.java

  1. package jiami;
  2.  
  3. import javax.crypto.Cipher;
  4. import javax.crypto.KeyGenerator;
  5. import javax.crypto.SecretKey;
  6. import org.apache.commons.codec.binary.Base64;
  7. import org.bouncycastle.jce.provider.BouncyCastleProvider;
  8.  
  9. import javax.crypto.Cipher;
  10. import javax.crypto.KeyGenerator;
  11. import javax.crypto.SecretKey;
  12. import javax.crypto.spec.SecretKeySpec;
  13. import java.security.Key;
  14. import java.security.Security;
  15.  
  16. public class IDEA implements Method {
  17.  
  18. public static final String KEY_ALGORITHM = "IDEA";
  19.  
  20. public static final String CIPHER_ALGORITHM = "IDEA/ECB/ISO10126Padding";
  21.  
  22. public static byte[] initkey() throws Exception {
  23. // 加入bouncyCastle支持
  24. Security.addProvider(new BouncyCastleProvider());
  25.  
  26. // 实例化密钥生成器
  27. KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
  28. // 初始化密钥生成器,IDEA要求密钥长度为128位
  29. kg.init(128);
  30. // 生成密钥
  31. SecretKey secretKey = kg.generateKey();
  32. // 获取二进制密钥编码形式
  33. return secretKey.getEncoded();
  34. }
  35.  
  36. /**
  37. * 转换密钥
  38. *
  39. * @param key
  40. * 二进制密钥
  41. * @return Key 密钥
  42. */
  43. private static Key toKey(byte[] key) throws Exception {
  44. // 实例化DES密钥
  45. // 生成密钥
  46. SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);
  47. return secretKey;
  48. }
  49.  
  50. /**
  51. * 加密数据
  52. *
  53. * @param data
  54. * 待加密数据
  55. * @param key
  56. * 密钥
  57. * @return byte[] 加密后的数据
  58. */
  59. private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
  60. // 加入bouncyCastle支持
  61. Security.addProvider(new BouncyCastleProvider());
  62. // 还原密钥
  63. Key k = toKey(key);
  64. // 实例化
  65. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
  66. // 初始化,设置为加密模式
  67. cipher.init(Cipher.ENCRYPT_MODE, k);
  68. // 执行操作
  69. return cipher.doFinal(data);
  70. }
  71.  
  72. /**
  73. * 解密数据
  74. *
  75. * @param data
  76. * 待解密数据
  77. * @param key
  78. * 密钥
  79. * @return byte[] 解密后的数据
  80. */
  81. private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
  82. // 加入bouncyCastle支持
  83. Security.addProvider(new BouncyCastleProvider());
  84. // 还原密钥
  85. Key k = toKey(key);
  86. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
  87. // 初始化,设置为解密模式
  88. cipher.init(Cipher.DECRYPT_MODE, k);
  89. // 执行操作
  90. return cipher.doFinal(data);
  91. }
  92.  
  93. public static String getKey() {
  94. String result = null;
  95. try {
  96. result = Base64.encodeBase64String(initkey());
  97. } catch (Exception e) {
  98. e.printStackTrace();
  99. }
  100. return result;
  101. }
  102.  
  103. public static String ideaEncrypt(String data, String key) {
  104. String result = null;
  105. try {
  106. byte[] data_en = encrypt(data.getBytes(), Base64.decodeBase64(key));
  107. result = Base64.encodeBase64String(data_en);
  108. } catch (Exception e) {
  109. e.printStackTrace();
  110. }
  111. return result;
  112. }
  113.  
  114. public static String ideaDecrypt(String data, String key) {
  115. String result = null;
  116. try {
  117. byte[] data_de = decrypt(Base64.decodeBase64(data), Base64.decodeBase64(key));
  118. ;
  119. result = new String(data_de);
  120. } catch (Exception e) {
  121. e.printStackTrace();
  122. }
  123. return result;
  124. }
  125.  
  126. public void work(String str, String password) {
  127. String data = "20163432张运涛";
  128. String key = getKey();
  129. System.out.println("要加密的原文:" + data);
  130. System.out.println("密钥:" + key);
  131. String data_en = ideaEncrypt(data, key);
  132. System.out.println("密文:" + data_en);
  133. String data_de = ideaDecrypt(data_en, key);
  134. System.out.println("原文:" + data_de);
  135. }
  136.  
  137. public static void main(String[] args) {
  138. // TODO Auto-generated method stub
  139. System.out.println("IDEA加密算法");
  140. IDEA idea = new IDEA();
  141. try {
  142. idea.work("8787878787878787", "0E329232EA6D0D73");
  143. } catch (Exception e) {
  144. System.out.println(e.getMessage());
  145. }
  146. }
  147.  
  148. }

zhuhanshu.java

  1. package jiami;
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class zhuhanshu {
  6.  
  7. public static void main(String[] args) {
  8.  
  9. DES des = new DES();
  10. IDEA idea = new IDEA();
  11. try {
  12. int n = 0;
  13.  
  14. Scanner in = new Scanner(System.in);
  15. while (n != 3) {
  16. System.out.println("请选择要使用的加密算法 1.DES加密算法 2.IDEA加密算法");
  17. System.out.println("3.退出");
  18. System.out.println("请选择:");
  19. if (in.hasNextInt()) {
  20. n = in.nextInt();
  21. } else {
  22. System.out.println("输入的不是整数,请重新输入:");
  23. continue;
  24. }
  25. switch (n) {
  26. case 1: {
  27.  
  28. des.work("1787878787878787", "0E329232EA6D0D73");
  29. break;
  30. }
  31. case 2: {
  32. idea.work("8787878787878787", "0E329232EA6D0D73");
  33. break;
  34. }
  35. }
  36. }
  37. }
  38.  
  39. catch (Exception e) {
  40. System.out.println(e.getMessage());
  41. }
  42. }
  43. }

完整源码

https://pan.baidu.com/s/15WkY9Y_5Z2KIYX1jJxFdAw

用到的jar包

https://pan.baidu.com/s/1ehjrDdW_bTwkQfjwP2FkSg

目前常用的加密算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;的更多相关文章

  1. 【C#公共帮助类】给大家分享一些加密算法 (DES、HashCode、RSA、AES等)

    AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的 ...

  2. 对称加密算法之DES算法

    数据加密标准(data encryption standard): DES是一种分组加密算法,输入的明文为64位,密钥为56位,生成的密文为64位. DES对64位的明文分组进行操作.通过一个初始置换 ...

  3. 完成一个MVC+Nhibernate+Jquery-EasyUI信息发布系统

    一.最近学习了Jquery-EasyUI框架,结合之前用过的MVC3+Nhibernate做一个信息发布系统,对工作一年半的自己做一个总结吧!(也正好 供初学者学习!) 二.先上截图(系统简介),让大 ...

  4. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  5. JAVA 加密算法初探DES&AES

    开发项目中需要将重要数据缓存在本地以便在离线是读取,如果不对数据进行处理,很容易造成损失.所以,我们一般对此类数据进行加密处理.这里,主要介绍两种简单的加密算法:DES&AES. 先简单介绍一 ...

  6. 搭建一个超好用的 cmdb 系统

    10 分钟为你搭建一个超好用的 cmdb 系统 CMDB 是什么,作为 IT 工程师的你想必已经听说过了,或者已经烂熟了,容我再介绍一下,以防有读者还不知道.CMDB 的全称是 Configurati ...

  7. 使用Servlet和JSP实现一个简单的Web聊天室系统

    1 问题描述                                                利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...

  8. 一个新人如何学习在大型系统中添加新功能和Debug

    文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业 ...

  9. 整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观

    整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049

随机推荐

  1. 如何将Powerdesign物理模型中的name复制成comment

    Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' the current model ' get t ...

  2. python2.7升级3.5教程 可用

    1.查看Python版本: python -V 2.下载Python 3.5版本:wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.t ...

  3. 如何禁用package-lock

    因为 package-lock.json是自动生成的,可以配置 npm 来避免经常需要手动删除这个文件. 在当前项目禁用 package-lock.json 控制台下输入 echo 'package- ...

  4. HTML语言字符编码

    ! ! — 惊叹号Exclamation mark ” " " 双引号Quotation mark # # — 数字标志Number sign $ $ — 美元标志Dollar s ...

  5. javascript umd esm slim

    在CDN的连接中看到多个连接时如何选择? JavaScript 模块现状 UMD和ECMAScript模块 https://cdn.bootcss.com/popper.js/1.13.0/esm/p ...

  6. gmock

    https://www.cnblogs.com/welkinwalker/archive/2011/11/29/2267225.html http://www.cnblogs.com/jycboy/p ...

  7. 关于Discuz! X系列远程代码执行漏洞

    一.漏洞起源 突然有同事反馈,无法注册 看到这里不了解的同行估计一年懵逼,这里也是常用的漏洞攻击,可以肯定的是  badwords.php文件被修改了 ,可以查看这个文件内容 <?php $_C ...

  8. Centos-7.x 下子网掩码的配置

    [背景] 今天在自己的虚拟机上安装上了centos-7.6操作系统,应该是安装的过程中大意了:安装完成后虚拟机可以正常访问外网但是 我的笔记本连接不上虚拟机. 笔记本的IP地址:172.16.192. ...

  9. Java里进制转换(二进制、八进制、十进制、十六进制)

    // 十进制转其它进制(二进制,八进制,十六进制) int k = 17; System.out.println(Integer.toBinaryString(k));// 转二进制 System.o ...

  10. Delphi目录监控、目录监听

    资料地址: 1.https://www.cnblogs.com/studypanp/p/4890970.html 单元代码: (************************************ ...