1程序实现简单密码替换

首先我们找一篇英文文章

然后写程序简单替换,这里我们使用移位替换a移3位替换成d(key表示移位数)

读入文件函数

测试加密System.out.println(encode(readfile("2.txt"),3));

加密前

加密后

然后我们来破解

我们知道英文中出现频率最高字母的是e字母,我们先测试下:

测试代码:

主函数输出:System.out.println(find(readfile("2.txt")));

结果果然是e

现在我们假设只有加密后的文章如下该文章才用的移位加密方式和知道一篇文章里最多的字母应该是e,

我们首先统计文章里出现最多的字母,发现是h 然后用 h-e得3,我们就知道了偏移量为3,解密只需要全部-3就可以得到原文。

解密函数:

测试结果:

解密后和原文

源代码

package gh;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.HashMap;
import java.util.Iterator;
/*** 信息安全作业* @author ganhang**/
public class encrypt {private static HashMap<String, Integer> h=new HashMap<String, Integer>();public static void main(String[] args) {
//        System.out.println(readfile("2.txt"));
//        System.out.println(encode(readfile("2.txt"),3));
//        System.out.println(find(readfile("2.txt")));
        String encodeString =encode(readfile("2.txt"),3);//加密后的字符串String decodeString =decode(encodeString);//解密后的字符串
        System.out.println(decodeString);}/*** 解密* @param s*/public static String decode(String s){String maxString =find(s);//找出出现最多的字母//System.out.println(maxString);char maxchar='e';//自然状态下出现最多的字母char max =maxString.charAt(0);//转字母int shift=max-maxchar;//获得偏移量(这里是+3)return encode(s,0-shift);//(解密只需要偏移-3)
    }/*** 找出出现频率最高的字母* @param s* @return*/public static String find(String s){//HashMap<String, Integer> h=new HashMap<String, Integer>();char c[]=s.toCharArray();int count=0;for(int i=0;i<c.length;i++){if (c[i] <= 'Z' && c[i] >= 'A' || c[i] <= 'z' && c[i] >= 'a') {if(h.get(""+c[i])!=null)count=h.get(""+c[i]);h.put(c[i]+"",++count);}}int max=-1;String maxString=null;for (String str : h.keySet()) {if (h.get(str) > max) {max = h.get(str);maxString = str;}}return maxString;}/*** 读文件* @param url* @return*/public static String readfile(String url){StringBuilder sb = new StringBuilder();try {Reader in=new InputStreamReader(new FileInputStream(url));char []cbuf=new char[1024];int len;while((len=in.read(cbuf))!=-1){sb.append(cbuf);}in.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return sb.toString();}/*** 移位加密* @param s* @param key* @return*/public static String encode(String s, int key) {StringBuilder sb = new StringBuilder();char[] c = s.toCharArray();for (int i = 0; i < c.length; i++) {if (c[i] <= 'Z' && c[i] >= 'A' || c[i] <= 'z' && c[i] >= 'a') {char ch = (char) (c[i] + key);sb.append(ch);}elsesb.append(c[i]);}return sb.toString();}
}

由于是作业,请勿抄袭哦(滑稽脸)。

转载于:https://www.cnblogs.com/ganhang-acm/p/5405876.html

信息安全之程序实现简单替换加密,并用字母频率统计进行破解相关推荐

  1. 认证令牌_Java应用程序的简单令牌认证

    认证令牌 "我喜欢编写身份验证和授权代码." 〜从来没有Web开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. ...

  2. Java应用程序的简单令牌认证

    "我喜欢编写身份验证和授权代码." 〜从来没有Web开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. JSON ...

  3. 简单so加密app案例(一)

    前言 在写so的加密和解密之前,我们需要具备的是对so文件(elf文件)的格式解析一定要有足够的熟悉! elf文件格式解析文章: ELF探究 之 ELF文件介绍(一) - 简书 [原创] ELF文件格 ...

  4. linux系统下Qt应用程序重启,嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws)...

    嵌入式Linux重启QT应用程序的简单办法(基于QT4.8 qws) 应用软件一般都有这样的业务需求: 当有新版本的APP,则程序就需要执行更新,更新完毕后(所谓的更新大多就是以覆盖的方式),不需要关 ...

  5. 密码学学习笔记(一)——凯撒密码及简单替换密码

    文章目录 1. 凯撒密码 1.1 加解密方式 1.1.1 加密 1.1.2 解密 1.2 暴力破解 2. 简单替换密码 2.1 加解密方式 2.1.1 加密 2.1.2 解密 2.2 频率分析法破解 ...

  6. 200个c语言程序(由简单到复杂),200个c语言程序(由简单到复杂)

    200个C语言程序(由简单到复杂)从简单到难的200来个经典C程序csdn上的不过那里要资源分,自己下了下来,放到论坛里.有需要的童鞋可以下载学习学习.第一部分 基础篇 001 第一个C程序 002 ...

  7. c语言文件加密解密单词统计,C语言文件加密解密及单词统计程序.doc

    C语言文件加密解密及单词统计程序.doc (10页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分  高级语言程序设计 课程设计学 院 计算 ...

  8. 简单文件加密解密系统(c++)

    简单文件加密解密系统(c++) 一.原理 二.实现思路 三.c++代码 四.运行结果 一.原理   为了实现加解密,首先需要一个码本文件.一个基本的码本文件包含26个字母,即a~z打乱顺序的结果,比如 ...

  9. 练习6-3 英文字母替换加密(大小写转换+后移1位) (15 分)

    本题要求编写程序,将英文字母替换加密.为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文.变换规则是:将明文中的所有英文字母替换为字母表中的后一个字母,同时将小写字母转换为大写字母,大 ...

  10. 脱离.Net Framework运行doNet程序的简单方法

    脱离.Net Framework运行doNet程序的简单方法(Console) 在.Net Framework下,你就算写一个小小的控制台程序,哪怕只有几K大小,我们必须要安装一个几十M的Framew ...

最新文章

  1. “天河二号”总工程师杜云飞谈星光超算应用平台设计
  2. Kubernetes系统架构简介--转
  3. Oracle SQL Developer中进行存储过程调试
  4. ElasticSearch插件demo
  5. Android Studio自定义模板 做开发竟然可以如此轻松 后篇
  6. hashmap put过程_阿里面试官:HashMap数据结构之道
  7. 基于单片机的无线鼠标设计
  8. Hadoop配置文件( hadoop-env.sh、core-site.xml、hdfs-site.xm、mapred-site.xml、yarn-site.xml、 slaves)详解
  9. python图片加透明通道并将背景设为透明
  10. Aho-Corasick算法学习
  11. SAN光纤交换机常用命令整理(转)
  12. 论文阅读:Video Visual Relation Detection via Iterative Inference
  13. inno setup 自定义生成的卸载程序
  14. TCP/IP协议分层
  15. radis安装和使用
  16. Oracle导入 1T 数据
  17. 中国历史朝代 英文翻译 A Brief Chinese Chronology
  18. c语言习题:华氏度摄氏度比照表
  19. Java图片合成并引入外部字体写入文字
  20. 微信小程序-目标追踪-数据库设计

热门文章

  1. mysql 拷贝权限_mysql复制表的三种方法+grant三类权限说明
  2. Python项目开发基础 -- with open (filename) as 读写文件
  3. 蒙文字体怎么安装_蒙文搜索APP内置键盘布局图
  4. oracle判断时间条件相等_判断条件的先后顺序,会引起索引失效么?
  5. python 2 函数
  6. 自定义 Yasnippet 模板
  7. Bind 一些有趣的东西 【未完待续】
  8. php操作大缓存的存储与读取
  9. 使用Perl实现系统管理自动化(第二版) 中文电子版
  10. 【原创】查找原始MySQL死锁ID