目前常用的加密算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;
1.加密算法的类图结构
2.源代码
2.1代码运行截图
2.2代码的目录结构
2.3具体代码
MethodFactory.java
- package jiami;
- public interface MethodFactory {
- public Method produceMethod();
- }
DESFactory.java
- package jiami;
- public class DESFactory implements MethodFactory {
- public DES produceMethod() {
- System.out.println("使用DES算法");
- return new DES();
- }
- }
IDEAFactory.java
- package jiami;
- public class IDEAFactory implements MethodFactory {
- public IDEA produceMethod() {
- System.out.println("使用IDEA算法");
- return new IDEA();
- }
- }
Method.java
- package jiami;
- public interface Method {
- public abstract void work(String str, String password);
- }
DES.java
- package jiami;
- import javax.crypto.Cipher;
- import javax.crypto.KeyGenerator;
- import javax.crypto.SecretKey;
- public class DES implements Method {
- public void work(String str, String password) {
- String codeStringBegin = "信1605-320163432 张运涛"; // 要加密的明文
- String codeStringEnd = null; // 加密后的密文
- String decodeString = null; // 密文解密后得到的明文
- System.out.println("要加密的明文:" + codeStringBegin);
- String cipherType = "DESede"; // 加密算法类型,可设置为DES、DESede、AES等字符串
- 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("要加密的字符串是:" + codeStringBegin);
- byte[] codeStringByte = codeStringBegin.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("");
- codeStringEnd = new String(codeStringByteEnd);
- System.out.println("加密后的字符串是:" + codeStringEnd);
- 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("");
- decodeString = new String(decodeStringByteEnd);
- System.out.println("解密后的字符串是:" + decodeString);
- 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());
- }
- }
- }
IDEA.java
- package jiami;
- 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.Cipher;
- import javax.crypto.KeyGenerator;
- import javax.crypto.SecretKey;
- 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 key
- * 二进制密钥
- * @return Key 密钥
- */
- private static Key toKey(byte[] key) throws Exception {
- // 实例化DES密钥
- // 生成密钥
- SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);
- return secretKey;
- }
- /**
- * 加密数据
- *
- * @param data
- * 待加密数据
- * @param key
- * 密钥
- * @return byte[] 加密后的数据
- */
- private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
- // 加入bouncyCastle支持
- Security.addProvider(new BouncyCastleProvider());
- // 还原密钥
- Key k = toKey(key);
- // 实例化
- Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
- // 初始化,设置为加密模式
- cipher.init(Cipher.ENCRYPT_MODE, k);
- // 执行操作
- return cipher.doFinal(data);
- }
- /**
- * 解密数据
- *
- * @param data
- * 待解密数据
- * @param key
- * 密钥
- * @return byte[] 解密后的数据
- */
- private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
- // 加入bouncyCastle支持
- Security.addProvider(new BouncyCastleProvider());
- // 还原密钥
- Key k = toKey(key);
- Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
- // 初始化,设置为解密模式
- cipher.init(Cipher.DECRYPT_MODE, k);
- // 执行操作
- return cipher.doFinal(data);
- }
- public static String getKey() {
- String result = null;
- try {
- result = Base64.encodeBase64String(initkey());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return result;
- }
- public static String ideaEncrypt(String data, String key) {
- String result = null;
- try {
- byte[] data_en = encrypt(data.getBytes(), Base64.decodeBase64(key));
- result = Base64.encodeBase64String(data_en);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return result;
- }
- public static String ideaDecrypt(String data, String key) {
- String result = null;
- try {
- byte[] data_de = decrypt(Base64.decodeBase64(data), Base64.decodeBase64(key));
- ;
- result = new String(data_de);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return result;
- }
- public void work(String str, String password) {
- String data = "20163432张运涛";
- String key = getKey();
- System.out.println("要加密的原文:" + data);
- System.out.println("密钥:" + key);
- String data_en = ideaEncrypt(data, key);
- System.out.println("密文:" + data_en);
- String data_de = ideaDecrypt(data_en, key);
- System.out.println("原文:" + data_de);
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- System.out.println("IDEA加密算法");
- IDEA idea = new IDEA();
- try {
- idea.work("8787878787878787", "0E329232EA6D0D73");
- } catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
- }
zhuhanshu.java
- package jiami;
- import java.util.Scanner;
- public class zhuhanshu {
- public static void main(String[] args) {
- DES des = new DES();
- IDEA idea = new IDEA();
- try {
- int n = 0;
- Scanner in = new Scanner(System.in);
- while (n != 3) {
- System.out.println("请选择要使用的加密算法 1.DES加密算法 2.IDEA加密算法");
- System.out.println("3.退出");
- System.out.println("请选择:");
- if (in.hasNextInt()) {
- n = in.nextInt();
- } else {
- System.out.println("输入的不是整数,请重新输入:");
- continue;
- }
- switch (n) {
- case 1: {
- des.work("1787878787878787", "0E329232EA6D0D73");
- break;
- }
- case 2: {
- idea.work("8787878787878787", "0E329232EA6D0D73");
- break;
- }
- }
- }
- }
- catch (Exception e) {
- System.out.println(e.getMessage());
- }
- }
- }
完整源码
https://pan.baidu.com/s/15WkY9Y_5Z2KIYX1jJxFdAw
用到的jar包
https://pan.baidu.com/s/1ehjrDdW_bTwkQfjwP2FkSg
目前常用的加密算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;的更多相关文章
- 【C#公共帮助类】给大家分享一些加密算法 (DES、HashCode、RSA、AES等)
AES 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的 ...
- 对称加密算法之DES算法
数据加密标准(data encryption standard): DES是一种分组加密算法,输入的明文为64位,密钥为56位,生成的密文为64位. DES对64位的明文分组进行操作.通过一个初始置换 ...
- 完成一个MVC+Nhibernate+Jquery-EasyUI信息发布系统
一.最近学习了Jquery-EasyUI框架,结合之前用过的MVC3+Nhibernate做一个信息发布系统,对工作一年半的自己做一个总结吧!(也正好 供初学者学习!) 二.先上截图(系统简介),让大 ...
- 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小
原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...
- JAVA 加密算法初探DES&AES
开发项目中需要将重要数据缓存在本地以便在离线是读取,如果不对数据进行处理,很容易造成损失.所以,我们一般对此类数据进行加密处理.这里,主要介绍两种简单的加密算法:DES&AES. 先简单介绍一 ...
- 搭建一个超好用的 cmdb 系统
10 分钟为你搭建一个超好用的 cmdb 系统 CMDB 是什么,作为 IT 工程师的你想必已经听说过了,或者已经烂熟了,容我再介绍一下,以防有读者还不知道.CMDB 的全称是 Configurati ...
- 使用Servlet和JSP实现一个简单的Web聊天室系统
1 问题描述 利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...
- 一个新人如何学习在大型系统中添加新功能和Debug
文章背景: 今年七月份正式入职,公司主营ERP软件,楼主所在的组主要负责二次开发,使用的语言是Java. 什么叫二次开发呢?ERP软件的客户都是企业.而这些企业之间的情况都有所不同,一套标准版本的企业 ...
- 整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观
整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049
随机推荐
- 如何将Powerdesign物理模型中的name复制成comment
Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl ' the current model ' get t ...
- 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 ...
- 如何禁用package-lock
因为 package-lock.json是自动生成的,可以配置 npm 来避免经常需要手动删除这个文件. 在当前项目禁用 package-lock.json 控制台下输入 echo 'package- ...
- HTML语言字符编码
! ! — 惊叹号Exclamation mark ” " " 双引号Quotation mark # # — 数字标志Number sign $ $ — 美元标志Dollar s ...
- javascript umd esm slim
在CDN的连接中看到多个连接时如何选择? JavaScript 模块现状 UMD和ECMAScript模块 https://cdn.bootcss.com/popper.js/1.13.0/esm/p ...
- gmock
https://www.cnblogs.com/welkinwalker/archive/2011/11/29/2267225.html http://www.cnblogs.com/jycboy/p ...
- 关于Discuz! X系列远程代码执行漏洞
一.漏洞起源 突然有同事反馈,无法注册 看到这里不了解的同行估计一年懵逼,这里也是常用的漏洞攻击,可以肯定的是 badwords.php文件被修改了 ,可以查看这个文件内容 <?php $_C ...
- Centos-7.x 下子网掩码的配置
[背景] 今天在自己的虚拟机上安装上了centos-7.6操作系统,应该是安装的过程中大意了:安装完成后虚拟机可以正常访问外网但是 我的笔记本连接不上虚拟机. 笔记本的IP地址:172.16.192. ...
- Java里进制转换(二进制、八进制、十进制、十六进制)
// 十进制转其它进制(二进制,八进制,十六进制) int k = 17; System.out.println(Integer.toBinaryString(k));// 转二进制 System.o ...
- Delphi目录监控、目录监听
资料地址: 1.https://www.cnblogs.com/studypanp/p/4890970.html 单元代码: (************************************ ...