单表置换密码java代码实现_单表替换密码

要求:

实现单表替换密码,用键盘接收明文和密钥,屏幕答应替换表和密文,大小写敏感,输入健壮性。

实际问题:

密钥处理应该是这个程序的重点,加密和解密都没有什么要注意的地方。用key[]数组接收keytext[],并分三部分处理。

第一部分统一换为小写:

//-----------------处理大写为小写------------------

int i, j, z, len = strlen(Ktext);

for (i = 0; i < len; i++)

if (Ktext[i] >= 65 && Ktext[i] <= 90)

Ktext[i] = Ktext[i] + 32;

第二部分去掉重复字母和标点符号:

//----------------去掉重复和标点符号---------------

for (i = 0, j = 0; i < strlen(Ktext); i++)

{

if (i == 0 && Ktext[i] >= 97 && Ktext[i] <= 122)//第一位直接复制过去

{

K[j] = Ktext[i];

j++;

}

else if (i != 0 && Ktext[i] >= 97 && Ktext[i] <= 122)//先复制到key中,在拿出来于密钥文前面的字符对比,无则复制继续,有则置空

{

K[j] = Ktext[i];

for (z = 0; z < i; z++)

{

if (K[j] == Ktext[z])

K[j] = NULL;

}

if (K[j] != NULL)

j++;

}

}

第三部分就是用未出现的字母顺序补位:

//------------用未出现的字母补全key-------------

len = strlen(K);

char temp = 'a' - 1;

int tag = 0;//设定标识位,扫描有相同字符置为1,无则置为0

for (i = 0; i < 26; i++)

{

temp = temp + 1;

for (j = 0; j < len; j++)

{

if (K[j] == temp)

tag = 1;

}

if (tag == 1) {//根据标志位的值选择是否补位

tag = 0;

}

else if (tag == 0) {

K[len] = temp;

len += 1;

}

}

程序源码:

// Console-单表代换密码.cpp

//2015-10-3

#include "stdafx.h"

#include

using namespace std;

int text_len = 500;

//处理key

void make_key(char[], char[]);

//加密

void encrypt(char [], char[], char[]);

//解密

void decrypt(char[], char[], char[]);

int main()

{

//申请密钥文,密钥,原文空间

char *keytext, *key, *plaintext, *ciphertext;

int en_len;

plaintext = (char*)calloc(text_len, sizeof(char));

keytext = (char*)calloc(text_len, sizeof(char));

key = (char*)calloc(27, sizeof(char));

cout << "-------input keytext-------" << endl;

cin.getline(keytext, text_len);

//处理密钥,输出替换表

make_key(keytext, key);

cout << "-------exchange list-------"<

cout << key <

//根据原文长度,申请密文空间

cin.getline(plaintext, text_len);

en_len = strlen(plaintext);

ciphertext = (char*)calloc(en_len + 1, sizeof(char));

//加密,输出密文

encrypt(key, plaintext, ciphertext);

cout <

//解密,输出原文

decrypt(key, ciphertext,plaintext);

cout <

return 0;

}

//处理key

void make_key(char Ktext[], char K[])

{

//-----------------处理大写为小写------------------

int i, j, z, len = strlen(Ktext);

for (i = 0; i < len; i++)

if (Ktext[i] >= 65 && Ktext[i] <= 90)

Ktext[i] = Ktext[i] + 32;

//----------------去掉重复和标点符号---------------

for (i = 0, j = 0; i < strlen(Ktext); i++)

{

if (i == 0 && Ktext[i] >= 97 && Ktext[i] <= 122)//第一位直接复制过去

{

K[j] = Ktext[i];

j++;

}

else if (i != 0 && Ktext[i] >= 97 && Ktext[i] <= 122)//先复制到key中,在拿出来于密钥文前面的字符对比,无则复制继续,有则置空

{

K[j] = Ktext[i];

for (z = 0; z < i; z++)

{

if (K[j] == Ktext[z])

K[j] = NULL;

}

if (K[j] != NULL)

j++;

}

}

//------------用未出现的字母补全key-------------

len = strlen(K);

char temp = 'a' - 1;

int tag = 0;//设定标识位,扫描有相同字符置为1,无则置为0

for (i = 0; i < 26; i++)

{

temp = temp + 1;

for (j = 0; j < len; j++)

{

if (K[j] == temp)

tag = 1;

}

if (tag == 1) {//根据标志位的值选择是否补位

tag = 0;

}

else if (tag == 0) {

K[len] = temp;

len += 1;

}

}

}

//------------------加密---------------

//区分大小写,其余字符直接复制

void encrypt(char key[],char platext[], char ciptext[])

{

int pla_len = strlen(platext);

for (int i = 0; i

{

if (platext[i] >= 65 && platext[i] <= 90) //处理大写

{

ciptext[i] = key[platext[i] - 65];//根据原文在替换序列中的位置,输出对应位置的密文到密文字符串

}

else if (platext[i] >= 97 && platext[i] <= 122)//处理小写

{

ciptext[i] = key[platext[i] - 97] - 32;

}

else

ciptext[i] = platext[i];

}

}

//-----------------解密----------------

//区分大小写,其余字符直接复制

void decrypt(char key[], char ciptext[], char platext[])

{

int cip_len = strlen(ciptext);

for (int i = 0; i

{

if (ciptext[i] >= 65 && ciptext[i] <= 90)//处理大写

{

for (int j = 0; j < 26; j++)//根据密文确定对应密钥字符在序列中的位置,输出对应位置的原文

{

if (ciptext[i] + 32 == key[j])

platext[i] = 'a' + j;

}

}

else if (ciptext[i] >= 97 && ciptext[i] <= 122)//处理小写

{

for (int j = 0; j < 26; j++)

{

if (ciptext[i] == key[j])

platext[i] = 'a' + j-32;

}

}

else

platext[i] = ciptext[i];//其余位直接复制

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdu-5082

题意非常easy&#xff0c;就是给出父母的名字&#xff0c;然后依据父母的名字来给孩纸取名字&#xff01; 能够将此题简化为&#xff1a; 孩纸的名字父亲的frist name字符串&#xff08;_small_&#xff09;母亲额frist name; 然后将孩纸的名字输出就可以&#xff01;代码例如以…

java面试compareble_Java(面试必备):30 个 Java 集合面试问题和答案

30 个 Java 集合面试问题和答案前言今天博主将为大家分享一下Java(面试必备)&#xff1a;30 个 Java 集合面试问题和答案&#xff0c;不喜勿喷&#xff0c;如有异议欢迎讨论&#xff01;Java集合框架为Java编程语言的基础&#xff0c;也是Java面试中很重要的一个知识点。这里&a…

有关java的名句_关于志气的名言名句(精选50句)

1、路漫漫其修远兮&#xff0c;吾将上下而求索。——屈原《离骚》2、会当凌绝顶&#xff0c;一览众山小。——杜甫《望岳》3、志当存高远。——诸葛亮《诫外生书》4、精诚所加&#xff0c;金石为开。——《后汉书光武十王列传》5、天行健&#xff0c;君子以自强不息。——《周易…

java 折线图 放大 缩小_可拖拉放大缩小HC折线图 | JShare

可拖拉放大缩小HC折线图 | JSharevar chart Highcharts.chart(container, {chart: {zoomType: x},title: {text: Hide overlapping data labels},series: [{data: (function (arr, len) {var i;for (i 0; i < len; i i 1) {arr.push(i);}return arr;}([], 50)),dataLabe…

php二进制加密_怎样给PHP源代码加密?PHP二进制加密与解密的解决办法

分享2种PHP的源码加密方式&#xff0c;此加密方法支持任意PHP版。注意&#xff0c;加密后的PHP代码无需第三方工具解密&#xff0c;像往常一样&#xff0c;直接运行即可。function encode_file_contents($filename) {$typestrtolower(substr(strrchr($filename,.),1));if (php …

Hibernate所用15个jar包

Hbernate3.jar-------------------核心包antlr.jar----------------------------语言转换工具&#xff0c;hibernate用他将hql语句转换为sql语句dom4j.jar--------------------------解析xml文档的工具ehcahe.jar-------------------------缓存工具&#xff0c;如没提供其它缓存…

php中常用的运算符和表达式有哪几种,php 运算符与表达式详细介绍

php 运算符与表达式一、运算符的分类1、按操作数分类1.!true // 一元运算符2.$a$b // 二元运算符3.true ? 1:0 // 三元运算符2、按操功能分类(1)算术运算符1.、-、x、/、%(取余)(2)字符串运算符1.. // 例如&#xff1a;$a abc.efg;(3)赋值运算符1. // 简单赋值2.、-、X、/、…

ogrinfo使用

简介 orginfo是OGR模块中提供的一个重要工具&#xff0c;用于读取地图文件中记录&#xff0c;可以指定筛选条件&#xff08;按字段、sql、矩形范围&#xff09;使用方式 命令行参数 Usage: ogrinfo [--help-general] [-ro] [-q] [-where restricted_where][-spat xmin ymin xma…

php7与apache整合,apache集成php7.3.5的详细步骤

安装 php首先安装 php 的压缩包&#xff0c;目前下载地址解压文件到这个路径下&#xff1a;D:Program Filesphp-7.3.5(自行选择合适的路径).然后将这个路径加入到环境变量 path 中。然后打开 cmd 运行php -version,输出类似如下&#xff0c;说明安装成功。PHP 7.3.5 (cli) (bui…

php正则去除base64,使用PHP preg_match_all的正则表达式base64块

我正在尝试使用php中的正则表达式来匹配base64编码的块。 它以Content-Transfer-Encoding: base64开头&#xff0c;因此我希望可以在此之后匹配内容&#xff0c;但是下面的正则表达式无法正常工作。 请帮助我修复此正则表达式以匹配base64块。 在电子邮件正文中&#xff0c;bas…

真机iOS SDK升级后xcode不能进行真机调试 怎么办

今天升级了一下iPod的SDK到iOS8&#xff0c;xcode仅仅能支持到7.1&#xff0c;真机调试遇到问题&#xff1f;&#xff1f;&#xff1f;以下是解决的方法&#xff01;找到xcode&#xff0c;点击右键。打开显示包内容&#xff0c;按路径Contents/Develpoer/Platforms/iPoneOS.pla…

php 中断输出,PHP捕捉异常中断的方法

前言任何程序员在开发时都可能遇到过一些失误&#xff0c;或其他原因造成错误的发生。当然&#xff0c;用户如果不愿意或不遵循应用程序的约束&#xff0c;也会在使用时引起一些错误发生。本文主要介绍在php中用 register_shutdown_function进行异常处理的方法&#xff0c;有需…

JAVA的BIT数组

写个小东西&#xff0c;要去重复数字&#xff0c;用到BIT数组&#xff0c;虽然JAVA已经提供了一个BitSet&#xff0c;不过自己手痒&#xff0c;又写了一个简单的 原理就不写了&#xff0c;网上一大堆 1 import java.util.Iterator;2 import java.util.function.BiConsumer;3 4 …

php环境苹果搭建,mac下搭建php环境

本文主要和大家分享mac下搭建php环境&#xff0c;最近工作环境切换到Mac&#xff0c;所以以OS X Yosemite(10.10.1)为例&#xff0c;记录一下从零开始安装Mac下LNMP环境的过程确保系统已经安装xcode&#xff0c;然后使用一行命令安装依赖管理工具Homebrew。ruby -e "$(cur…

php后门 佛像,35张活的再久,也未必见过的照片,图2是佛像通过CT扫描后内部照...

今天这组照片可能很多人都是一次见到&#xff0c;包括小编本人看了也十分惊讶。最大的感触是&#xff0c;很多的商品居然是这么做出来的&#xff0c;看完了才有一种豁然开朗的感觉&#xff0c;废话不多说一起看看吧。鸡蛋里面套鸡蛋1000年前佛像&#xff0c;经过CT扫描后&#…

oracle层次化查询

一般我们在处理层次关系的数据时&#xff0c;在建ER关系模型&#xff0c;我们都会产生自关联的数据结构。如&#xff1a;emp员工表中empno和managerno就是&#xff0c;这样就产生了层次化的结构。 那么如何快速的查询一个已知的根节点&#xff0c;查找到相应的一系列子节点呢&a…

民生付 php,“民生付”升级我省电商支付体验

■周昆 俞正林我省电子商务的发展正在得到更多的金融支持&#xff0c;未开通网银的消费者也能方便地进行网上支付了。记者近日从民生银行福州分行了解到&#xff0c;该行全网线上收单产品“民生付”已经得到我省电子商务企业的青睐。通过该服务&#xff0c;我省电子商务商户只需…

droidbox官网

droidbox官网&#xff0c;droidbox已经移植到github上了 https://github.com/pjlantz/droidbox 转载于:https://www.cnblogs.com/nightnine/p/5169261.html

java实现缓存中间件,Redis,分布式系统中不可少的缓存中间件

1.为什么要用缓存内存在整个计算机系统来说也就是一个缓存&#xff0c;CPU操作内存速度很快&#xff1b;因为操作数据的时候&#xff0c;先从硬盘中取出数据放到内存中&#xff0c;然后CPU操作数据缓存&#xff1a;提升访问效率&#xff0c;将一些频繁访问地放在缓存里面image.…

matlab自带的人脸分类器,基于MATLAB,运用PCA+SVM的特征脸方法人脸识别

概述&#xff1a;此文章将要描述一种基于MATLAB平台&#xff0c;运用PCA主成分分析方法对图片数据进行降维&#xff0c;运用SVM支持向量机分类器对降维后的图片数据进行分类处理&#xff0c;从而达到人脸识别的目的。首先要感谢以下几篇文章的作者(后面引用会标识文章标号)2.PC…