首页 > 编程语言 >10.18软件设计——工厂方法模式之加密算法

10.18软件设计——工厂方法模式之加密算法

时间:2025-01-07 22:54:57浏览次数:7  
标签:String 软件设计 System 10.18 密钥 println public 加密算法 out

软件设计——工厂方法模式之加密算法 1、类图  

 

  2、源代码   2.1 结构目录  

 

  2.2 所需jar包   这里分享几个下载 jar 包的网址:   http://www.mvnrepository.com/   http://mvnrepository.com/   http://findjar.com   http://sourceforge.net/   注:将 jar 包放入 lib 文件夹后要进行构建路径   2.3 MethodFactory.java (抽象接口)     package test3; /**  * 抽象工厂类  * @author dell  *  */ public interface MethodFactory {  public Method produceMethod(); } 2.4 DESFactory.java     package test3; /**  * 具体工厂类DES  * @author dell  *  */ public class DESFactory implements MethodFactory {     public DES produceMethod() {         System.out.println("使用DES算法");         return new DES();     } } 2.5 IDEAFactory.java     package test3; /**  * 具体工厂类IDEA  * @author dell  *  */ public class IDEAFactory implements MethodFactory {     public IDEA produceMethod() {         System.out.println("使用IDEA算法");         return new IDEA();     } } 2.6 Method.java(抽象接口)     package test3; /**  * 抽象方法类  * @author dell  *  */ public interface Method {   public void work(String str, String password); } 2.7 DES.java     package test3;   import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey;   /**  * 具体方法类DES  * @author dell  *  */ public class DES implements Method{   public void work(String str, String password) {          String begincode = "人生苦短及时行乐"; // 要加密的明文          String endcode = null; // 加密后的密文          String opencode = null; // 密文解密后得到的明文          System.out.println("要加密的明文:" + begincode);          String cipherType = "DESede"; // 加密算法类型,可设置为DES(56)、DESede(112)、AES等字符串(128)          try {              // 获取密钥生成器              KeyGenerator keyGen = KeyGenerator.getInstance(cipherType);              // 初始化密钥生成器,不同的加密算法其密钥长度可能不同              keyGen.init(112);              // 生成密钥              SecretKey key = keyGen.generateKey();              // 得到密钥字节码              byte[] keyByte = key.getEncoded();              // 输出密钥的字节码              System.out.println("密钥是:");              for (int i = 0; i < keyByte.length; i++) {                  System.out.print(keyByte[i] + ",");              }              System.out.println("");              // 创建密码器              Cipher cp = Cipher.getInstance(cipherType);              // 初始化密码器              cp.init(Cipher.ENCRYPT_MODE, key);              System.out.println("要加密的字符串是:" + begincode);              byte[] codeStringByte = begincode.getBytes("UTF8");              System.out.println("要加密的字符串对应的字节码是:");              for (int i = 0; i < codeStringByte.length; i++) {                  System.out.print(codeStringByte[i] + ",");              }              System.out.println("");              // 开始加密              byte[] codeStringByteEnd = cp.doFinal(codeStringByte);              System.out.println("加密后的字符串对应的字节码是:");              for (int i = 0; i < codeStringByteEnd.length; i++) {                  System.out.print(codeStringByteEnd[i] + ",");              }              System.out.println("");              endcode = new String(codeStringByteEnd);              System.out.println("加密后的字符串是:" + endcode);              System.out.println("");              // 重新初始化密码器              cp.init(Cipher.DECRYPT_MODE, key);              // 开始解密              byte[] decodeStringByteEnd = cp.doFinal(codeStringByteEnd);              System.out.println("解密后的字符串对应的字节码是:");              for (int i = 0; i < decodeStringByteEnd.length; i++) {                  System.out.print(decodeStringByteEnd[i] + ",");              }              System.out.println("");              opencode = new String(decodeStringByteEnd);              System.out.println("解密后的字符串是:" + opencode);              System.out.println("");          } catch (Exception e) {              e.printStackTrace();          }      }        public static void main(String[] args) {          // TODO Auto-generated method stub          System.out.println("DES加密算法");          DES des = new DES();          try {              des.work("8787878787878787", "0E329232EA6D0D73");            } catch (Exception e) {              System.out.println(e.getMessage());          }      }   } 2.8 IDEA.java     package test3;   import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import org.apache.commons.codec.binary.Base64; import org.bouncycastle.jce.provider.BouncyCastleProvider;     import javax.crypto.spec.SecretKeySpec; import java.security.Key; import java.security.Security;   public class IDEA implements Method {       public static final String KEY_ALGORITHM = "IDEA";       public static final String CIPHER_ALGORITHM = "IDEA/ECB/ISO10126Padding";       public static byte[] initkey() throws Exception {         // 加入bouncyCastle支持         Security.addProvider(new BouncyCastleProvider());           // 实例化密钥生成器         KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);         // 初始化密钥生成器,IDEA要求密钥长度为128位         kg.init(128);         // 生成密钥         SecretKey secretKey = kg.generateKey();         // 获取二进制密钥编码形式         return secretKey.getEncoded();     }       /**      * 转换密钥      *       * @param 

标签:String,软件设计,System,10.18,密钥,println,public,加密算法,out
From: https://www.cnblogs.com/kongxiangzeng/p/18658606

相关文章

  • 自定义加密算法
    常见的哈希算法如Caesar,Base64,MurmurHash等已经被安全研究人员盯上了,经常使用这些算法作为特征定位恶意软件,因此最好使用自定义算法或不常见算法。base58加密cmd.exe#include<winsock2.h>#include<string.h>#include<stdio.h>#include<stdlib.h>constchar*const......
  • 软件设计模式课程设计---Python实现学生信息管理系统(MySQL数据库+前端可视化)
    效果图:代码目录:代码:main.pyimporttkinterastkfromtkinterimportmessageboxfromstudent_managerimportStudentManagerfromobserverimportStudentObserverfromfactoryimportStudentFactoryfromstrategyimportSortByName,SortByGradefromproxyim......
  • 恶意软件常用加密算法
    前面主要是加密字符串信息,加密算法还可以加密shellcode、通信数据包、配置信息等一、常用加密算法概述加密配置信息、加密通信信道、加密窃取数据、混淆代码放置静态分析总体来说就是加密shellcode、代码模块、配置信息、通信等二、加密配置信息设置一个场景,恶意dll文件,放在h......
  • 软件设计师考试知识点
    https://www.cnblogs.com/mh20131118/p/11334612.html https://www.cnblogs.com/blog-cjz/p/16005106.html本人已将笔记、历年真题与解析、备考方法整理压缩至【百度网盘】,需要资源的同学可以通过点击下面云盘链接进行保存下载。链接失效的话请在文章下面评论或私信我,我看到的......
  • 由 Mybatis 源码畅谈软件设计(九):“能用就行” 其实远远不够
    作者:京东保险王奕龙到本节Mybatis源码中核心逻辑基本已经介绍完了,在这里我想借助Mybatis其他部分源码来介绍一些我认为在编程中能最快提高编码质量的小方法,它们可能比较细碎,希望能对大家有所启发。关于方法的长度和方法拆分之前我在读完《代码整洁之道》时,非常痴迷于写小......
  • 10.18
    实验七:K均值聚类算法实现与测试一、实验目的 深入理解K均值聚类算法的算法原理,进而理解无监督学习的意义,能够使用Python语言实现K均值聚类算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。二、实验内容(1)从scikit-learn库中加载iris数据集,使用留出......
  • 《深入挖掘Python加解密:自定义加密算法的设计与实现》
    利用python实现加解密在正式编写各种加解密前,我们先写个小案例,如下。封面在文末呦!基础加解密-源码# 加密def encode():    source01 = '乐茵'    for c in source01:        ascii01 = ord(c)        ascii01 += 1      ......
  • 由 Mybatis 源码畅谈软件设计(五):ResultMap 的循环引用
    作者:京东保险王奕龙本节我们来了解Mybatis是如何处理ResultMap的循环引用,它的解决方案非常值得在软件设计中参考。另外作为引申,大家可以了解一下Spring是如何解决Bean的循环注入的。以单测org.apache.ibatis.submitted.permissions.PermissionsTest#checkNestedResult......
  • 由 Mybatis 源码畅谈软件设计(七):从根上理解 Mybatis 一级缓存
    作者:京东保险王奕龙本篇我们来讲一级缓存,重点关注它的实现原理:何时生效、生效范围和何时失效,在未来设计缓存使用时,提供一些借鉴和参考。1.准备工作定义实体publicclassDepartment{publicDepartment(Stringid){this.id=id;}privateStri......
  • 若依(spring-cloud)修改登陆密码加密算法
    文章目录前言一、解决办法二、解决过程1为啥要改加密算法2找不到校验代码总结前言若依是一套快速集成各种中间件的配套Java后端框架,本文旨在描述修改其登陆的加密算法。文章的大前提是后端框架是若依哈,不是的话可以跳过了~!文章创作原因:系统针对登陆密码是密文......