置换加密算法

  1 #include "stdio.h"
  2 #include "stdlib.h"
  3 #define column 3
  4 typedef char DataType;
  5 
  6 
  7 /************************************************************************/
  8 /* 置换加密算法。
  9 content为需要加密的内容,index为置换的密匙                                                                     */
 10 /************************************************************************/
 11 char * secertIn(DataType * content, int * index)
 12 {    
 13     int getLength(DataType *);
 14     char * returnChar = NULL,**putIn = NULL;
 15     int count = 0,getIndex = 0,i = 0,j = 0,length = 0,row = 0; //将内容分割后的行数
 16     length = getLength(content);
 17     // printf("明文内容长度: %d\n", length);
 18     //计算切割内容后的行数
 19     row = length / column;
 20     i = length % column;
 21     if(i > 0)
 22         row = row + 1;
 23     // printf("明文行数为:%d\n", row);
 24 
 25     //分配二维数组存放切割后的内容
 26     putIn = (char **) malloc(sizeof(char *) * row);
 27     for(i = 0; i < row; i++)
 28     {
 29         putIn[i] = (char * )malloc(sizeof(char) * column);
 30     }
 31 
 32     returnChar = (char *) malloc(sizeof(char) * row * column + 1);
 33     
 34     //将需要加密的内容存放进二维数组里
 35     for(i = 0; i < row; i++)
 36     {
 37         for(j = 0; j < column; j++)
 38         {
 39             if(i * column + j < length)
 40                 putIn[i][j] = content[i * column + j];
 41             else
 42                 putIn[i][j] = ' ';
 43         }
 44     }
 45     
 46     //对内容进行加密
 47     for(i = 0; i <column; i++)
 48     {
 49         getIndex = index[i];
 50         for(j = 0; j < row; j++)
 51         {
 52             returnChar[count] = putIn[j][getIndex];
 53             count++;
 54         }
 55     }
 56     returnChar[count] = '\0';
 57     
 58     return returnChar;
 59 }
 60 
 61 /************************************************************************/
 62 /* 置换加密算法的解密方法
 63 content为需要解密密的内容,index为置换的密匙                                                                     */
 64 /************************************************************************/
 65 char * secretOut(DataType * content, int * index)
 66 {
 67     int getLength(DataType *);
 68     char * returnChar = NULL,**putIn = NULL,**buffer =NULL;
 69     int count = 0,getIndex = 0,i = 0,j = 0,length = 0,row = 0; //将内容分割后的行数
 70     length = getLength(content);
 71     // printf("密文内容长度: %d\n", length);
 72     //计算切割内容后的行数
 73     row = length / column;
 74     i = length % column;
 75     if(i > 0)
 76         row = row + 1;
 77     // printf("密文文行数为:%d\n", row);
 78 
 79     //分配二维数组存放切割后的内容
 80     putIn = (char **) malloc(sizeof(char *) * row);
 81     for(i = 0; i < row; i++)
 82     {
 83         putIn[i] = (char * )malloc(sizeof(char) * column);
 84     }
 85     
 86     returnChar = (char *) malloc(sizeof(char) * row * column + 1);
 87 
 88     //分配二维数组空间,用来存放解密后的内容
 89     buffer = (char **) malloc(sizeof(char *) * row);
 90     for(i = 0; i < row; i++)
 91     {
 92         buffer[i] = (char * )malloc(sizeof(char) * column);
 93     }
 94     
 95     //将需要解密的内容存放进二维数组里
 96     for(i = 0; i < row; i++)
 97     {
 98         for(j = 0; j < column; j++)
 99         {
100             if(i * column + j < length)
101                 putIn[i][j] = content[i * column + j];
102             else
103                 putIn[i][j] = ' ';
104         }
105     }
106 
107     //将加密的内容按照密匙对行重新排列
108     for(i = 0; i < row; i++)
109     {
110         getIndex = index[i];
111         buffer[getIndex] = putIn[i];
112     }
113     for(i = 0; i < column; i++)
114     {
115         for(j = 0; j < row; j++)
116         {
117             returnChar[count] = buffer[j][i];
118             count++;
119         }
120     }
121     
122     returnChar[count] = '\0';
123 
124     return returnChar;
125 }
126 
127 
128 /************************************************************************/
129 /* 计算数组长度                                                                     */
130 /************************************************************************/
131 int getLength(DataType * content)
132 {
133     int count = 0;
134     while(*content != '\0')
135     {
136         content++;
137         count++;
138     }
139     return count;
140 }
141 
142 int main()
143 {
144 
145     char *a = "abcdefghi"; //明文
146     char *get;
147     int index[] = {2,1,0}; //密匙,长度和列数相同
148     
149     printf("明文:%s\n", a);
150     get = secertIn(a, index); //加密
151     printf("密文 :%s\n", get);
152     get = secretOut(get, index); //将上面加密后的密文进行解密
153     printf("解密后的得到明文: %s\n\n", get);
154     
155 }

 

转载于:https://www.cnblogs.com/hanyuan/archive/2012/09/20/2695813.html

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

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

相关文章

SQLlite数据导入到mySQL_如何批量导入数据到Sqlite数据库

做android和ios开发的一般都用Sqlite数据库&#xff0c;有的时候数据需要批量导入&#xff0c;那么如何导入呢&#xff1f;在这里&#xff0c;介绍2种方法供大家参考。一、用sqlite命令以windows系统为例&#xff0c;linux下命令是一样的。1.安装sqlite工具包首先要安装有sqlit…

c/c++ 运行库

11.2 C/C运行库 11.2.1 C语言运行库 任何一个C程序&#xff0c;它的背后都有一套庞大的代码来进行支撑&#xff0c;以使得该程序能够正常运行。这套代码至少包括入口函数&#xff0c;及其所依赖的函数所构成的函数集合。当然&#xff0c;它还理应包括各种标准库函数的实现。…

下面哪个字段是http请求中必须具备的_理解HTTP协议-HTTP协议详解总结

一、HTTP协议的演进HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议&#xff0c;它不关心数据传输的细节&#xff0c;主要是用来规定客户端和服务端的数据传输格式&#xff0c;最初是用来向客户端传输HTML页面的内容。默认端口是80。1、HTTP 0.9版本 1991年这个版…

查看一个结构体成员的方法

find / *.h -name|xargs grep 结构体名 这个方法并不是很凑效。。。 万能的gdb 法&#xff1a; int main(void){type var;return 0;}gcc -g a.cgdb a.outb mainrp varset print pretty onp varp main::v转载于:https://www.cnblogs.com/mathzzz/archive/2012/09/24/2700796.htm…

ad电阻原理图_负载电阻的原理及应用

在开始主题之前&#xff0c;我们需要了解的是&#xff1a;负载电阻是什么&#xff1f;将其拆分&#xff1a;负载和电阻&#xff1b;负载&#xff0c;顾名思义&#xff0c;是指连接在电路中的电源两端的电子元件。主要功能就是将电能转换成其他形式的能&#xff0c;以实现能量的…

终于搞定android驱动USB摄像头了!

多亏了stackoverflow看到的一篇帖子&#xff0c;其中有几句关键的话&#xff0c;然后顺藤摸瓜解决了问题。帖子大意&#xff1a;讨论的前提是你的USB摄像头是UVC兼容的&#xff08;如今大部分摄像头兼容&#xff09;默认Android不提供访问外部摄像头的API&#xff0c;所以你要考…

mysql怎么回复.from的数据库_mysql怎么回复.from的数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

python dataframe 新列_Python第二十四课:Pandas库(四)

Python第二十四课&#xff1a;Pandas库(四)点击上方“蓝字”&#xff0c;关注我们.不知不觉&#xff0c;我们已经跨越了千难万险&#xff0c;从零开始&#xff0c;一步步揭开了Python神秘的面纱。学到至今&#xff0c;回过头&#xff0c;才晓得自己在不知不觉已经学会了如此多的…

Sharepoint 2010 应用范围

应用范围&#xff1a;入口網站 (Site) 、 協同合作 (Community) 、 內容管理 (Content) 、 企業搜尋 (Search) 、 商業智慧 (Insight) 、 商業流程 (Composite) use: http://www.microsoft.com/taiwan/casestudies/products/moss.aspx# http://www.microsoft.com/taiwan/sharep…

Visual Studio 2005结合Direct 9.0 SDK(Aug2007)时应该注意的事项

要用DX SDK开发DX程序必然要用VC 6.0或者VS。但是现在的DX SDK VC 6.0已经不能胜任了&#xff0c;一般都是用VS2003或者VS2005来进行开发。 昨天&#xff0c;我开始搭建开发环境&#xff08;前次弄好了但是GHOST还原了就没了……&#xff09;&#xff0c;但是直到晚上十点多宿舍…

python opencv录制视频_如何使用OpenCV和Python录制视频?

我已经看过OpenCV的Python example介绍了如何使用VideoCapture和VideoWriter来捕获和写出视频文件。但我一直在想&#xff1a;OpenCV Error: Assertion failed (dst.data dst0.data) in cvCvtColor, file /tmp/opencv-n8PM/opencv-2.4.7.1/modules/imgproc/src/color.cpp, lin…

springboot mysql脚本_springboot配置mysql连接的实例代码

一&#xff1a;导入pmo.xm配置包mysql库连接、druid连接池、mybatis组件mysqlmysql-connector-javaruntimecom.alibabadruid-spring-boot-starter1.1.10org.mybatis.spring.bootmybatis-spring-boot-starter${mybatis.version}配置扫描文件src/main/java**/ *.xmltruesrc/main/…

win7里运行命令

Windowsr:打开“运行” 在“运行”里输入&#xff1a;services.msc 则打开服务转载于:https://www.cnblogs.com/echonn/archive/2012/09/27/2706416.html

编译pjsip2.0 + SDL 1.3

1第一步编译 SDL 1.3 安装Microsoft DirectX SDK (June 2010)编译&#xff1a; 错误&#xff0c;把D3DMATRIX提前到函数的变量声明前面。 1>d:\project\01_voip\sdl-1.3\sdl-1.3.0-6235\src\render\direct3d\sdl_render_d3d.c(593): error C2275: “D3DMATRIX”:将此类型用…

hashmap 遍历_别慌,送你21 个面试官必问HashMap考点

Java面试笔试面经、Java技术每天学习一点Java面试关注不迷路作者&#xff1a;菜鸟小于来源&#xff1a;https://www.cnblogs.com/Young111/p/11519952.html1&#xff1a;HashMap 的数据结构&#xff1f;A&#xff1a;哈希表结构(链表散列&#xff1a;数组链表)实现&#xff0c;…

ffmpeg遇到inttypes.h和UINT64_C

编译过程&#xff1a;错误一&#xff1a;无法打开包括文件:“inttypes.h”: No such file or directory解决方法&#xff1a;删除之&#xff0c;并在其之前添加如下代码&#xff1a; #if defined(WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__) # …

redis storm mysql_storm-redis 详解

多的不说&#xff0c;先来代码分析&#xff0c;再贴我自己写的代码。如果代码有错误&#xff0c;求更正。。导入两个关键包&#xff0c;其他项目需要的包&#xff0c;大家自己导入了&#xff0c;我pom下的包太多&#xff0c;不好一下扔上来。org.apache.stormstorm-redis${stor…

22套精美的网页按钮图标设计推荐(包括PSD和AI文件)

图标是一个简单的单色符号&#xff0c;表示对象的基本形状。字形被广泛地使用在我们周围的公共场所&#xff0c;如机场和商场或购物中心。在网页设计当中&#xff0c;他经常会被使用&#xff0c;用来展示每个元素代表的意思&#xff0c;他简洁大方&#xff0c;一目了然&#xf…

轻gc和重gc分别在什么时候发生_GC发展与现状

GC发展Java不像C或C那样&#xff0c;需要程序员在编程的过程中&#xff0c;时刻注意申请内存保存对象&#xff0c;在对象使用完成后&#xff0c;要在合适的时机将对象占用的内存释放掉(析构函数)&#xff1b;Java得意与内部的三大机制&#xff0c;保证了程序开发方便&#xff1…

解决VC不包含stdint.h头文件问题

stdint.h是C99的标准&#xff0c;主要用于统一跨平台数据定义。 MSVC中不带有这个头文件&#xff0c;直到VS2010&#xff08;新闻&#xff09;。 在之前的版本里面&#xff0c;我们可以&#xff1a; &#xff08;1&#xff09;下载这个头文件 download a MS version of this …