序列加密

现在字符序列 char buf[] = “hello everyone”;

按行读的话,肯定可以读出数据,如果按列来读话,则会出再乱码的现像。正是这种现
像可作为一种加密手段,称为序列加密。

  1 #include <stdio.h>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 char *encode(char *str, int column);//加密函数
  5 char **get2DMem(int row, int column);//获得二维空间
  6 char *decode(char* str, int column);//解密函数
  7 int main(void)
  8 {
  9     char *str="hello world!!";
 10     int column=5;
 11     char *secret=encode(str,column);
 12     printf("encode=%s\n",secret);
 13     str=decode(secret,column);
 14     printf("decode=%s\n",str);
 15     return 0;
 16 }
 17 //加密函数
 18 char *encode(char *str, int column)
 19 {
 20     int len=strlen(str);//原始长度
 21     int secretLen=0;//由于是二维序列加密,是吧一个字符串按行存储到一个二维空间中,
 22     if(len%column!=0)//后按列读取就是密文,如果最后一行字符串填不满,则自己拿什么字符补齐
 23         secretLen=len+(column-len%column);//计算经过处理后的字符串长度
 24     else
 25         secretLen=len;
 26     char *temp=(char *)calloc(secretLen+1, sizeof(char));
 27     strcpy(temp,str);
 28     int i=0;
 29     for(i=len;i<secretLen;i++)//将原本字符串长度和新长度之间的本程序用*填充
 30     {
 31         temp[i]=‘*‘;
 32
 33     }
 34     temp[i]=‘\0‘;
 35     //到此处已经得到补全长度的字符串,为temp,
 36     //接下来处理这个可以填充到二维空间的字符串,填入二维空间
 37     //申请并返回二维空间
 38     char *ttemp=temp;//用ttemp记录下temp的开头
 39     int row=secretLen/column;//计算得到二维空间的行数
 40     char **secret=get2DMem(row, column);
 41     int j=0;
 42     for(i=0;i<row;i++)      //将补全后的字符串按行存储到二维空间中
 43         for(j=0;j<column;j++)
 44         {
 45             secret[i][j]=*(temp++);
 46         }
 47     //到此处已经将字符串按照行序存储到二维空间中了
 48     //下面将二维空间中的内容按照列序读入到目标字符串中
 49     char *result=(char *)calloc(secretLen+1, sizeof(char));
 50     char *tresult=result;//用tresult记录结果字符串的开头
 51     for(i=0;i<column;i++){
 52         for(j=0;j<row;j++)
 53         {
 54             *result=secret[j][i];
 55             result++;
 56         }
 57     }
 58     *result=0;
 59     //加密完成
 60     return tresult;
 61 }
 62 //解密程序
 63 char *decode(char* str, int column)
 64 {
 65     int secretLen=strlen(str);
 66     int row=secretLen/column;
 67     char **secret=get2DMem(row,column);//申请同样行列数的二维空间
 68     int i=0,j=0;
 69     for(i=0;i<column;i++)//将字符串按列存储顺序存储到二维空间中
 70         for(j=0;j<row;j++)
 71         {
 72             secret[j][i]=*str++;
 73         }
 74     char *tresult=(char *)calloc(secretLen+1,sizeof(char));
 75     char *result=tresult;
 76     for(i=0;i<row;i++)//将二维空间中的字符按行读取出来就是
 77         for(j=0;j<column;j++)
 78         {
 79             //printf("%c",secret[i][j]);
 80             *tresult++=secret[i][j];
 81         }
 82     *tresult=0;
 83     while(*(--tresult)==‘*‘)
 84         ;
 85     tresult++;
 86     *tresult=0;
 87 //    printf("decode=%s\n",result);
 88     return result;
 89 }
 90 //申请二维空间函数
 91 char **get2DMem(int row, int column)
 92 {
 93     char **p=(char **)calloc(row,sizeof(char *));
 94     int i=0;
 95     for(i=0;i<row;i++)
 96     {
 97         p[i]=(char *)calloc(column, sizeof(char));
 98     }
 99     return p;
100 }

切记用字符指针访问字符串的时候,一定是*p,而不能犯迷糊搞成p之类的,这样访问必然出问题

时间: 2024-07-28 13:22:22

序列加密的相关文章

图像处理之Logistic混沌序列加密

前言:本文原发表在新浪博客http://blog.sina.com.cn/s/blog_b27f71160101h5bm.html,现新浪博客将其搬家至CSDN,原新浪博客停止更新. ①申请搬家后,迟迟未能收到申请搬家的码 ②再熟悉一下算法 ③联系键盘打字 基于以上三点,遂将博文重新敲一遍. Logistic混沌置乱,先不说有多复杂,其实很简单. Logistic函数是源于一个人口统计的动力学系统,其系统方程形式如下:  X(k+1) = u * X(k) * [1 - X(k)],(k=0,1

流媒体加密(1)

http://www.jiamisoft.com/blog/11238-liumeitijiamijishu.html 随着Internet的飞速发展和网上多媒体应用的普及,数字版权和隐私权的保护已成了一个愈来愈令人关注的问题,媒体资源的安全 也就成了一个热点的研究课题,而加密技术是保护媒体资源安全最重要的技术手段之一.笔者从传统密码技术入手,在结合流式媒体的特征基础上对其加密/解密机 制进行了深入的研究目的是将传统的密码技术与新兴的流媒体技术相结合,实现多媒体数据的实时加密保护. 一.用常规密

什么是私有密钥密码技术——密钥加密算法采用同一把密钥进行加密和解密

什么是私有密钥密码技术 私有密钥(Symmetric Key),又叫对称密钥.密钥加密算法采用同一把密钥进行加密和解密.它的优点是加密和解密速度非常快,但密钥的分发和管理比较困难.信息的发送者和接收者必须明确同一把密钥.因此,必须进行密钥交流,这通常需要其他更安全的信道来传送密钥.另外,每一对用户都需要有自己的一个独一无二的密钥.因此,如果一个发送者与很多人通信,就需要管理很多密钥.主要的对称密钥加密算法有DES.3DES.RC2.RC4.RC5.Blowtish和CAST等.在VPN中常用的有

图像处理之约瑟夫置乱加密

前言:本文原发表在新浪博客http://blog.sina.com.cn/s/blog_b27f71160101h5hb.html,现新浪博客将其搬家至CSDN,原新浪博客停止更新. ①申请搬家后,迟迟未能收到申请搬家的码 ②再熟悉一下算法 ③联系键盘打字 基于以上三点,遂将博文重新敲一遍. 约瑟夫置乱加密 如果看了前两篇博客的朋友都会知道这个思路,如果没有看,那么请先看这里: ①图像处理之Logistic混沌序列加密 ②图像处理之Logistic混沌置乱加密 如果你看了,那么好极了,下面我们利

图像处理之Logistic混沌置乱加密

前言:本文原发表在新浪博客http://blog.sina.com.cn/s/blog_b27f71160101h5gi.html,现新浪博客将其搬家至CSDN,原新浪博客停止更新. ①申请搬家后,迟迟未能收到申请搬家的码 ②再熟悉一下算法 ③联系键盘打字 基于以上三点,遂将博文重新敲一遍. Logistic混沌置乱加密: 这里再根据Logistic混沌进行另一种置乱:位置置乱. 什么是位置置乱,顾名思义就是把图像中某一像素点的位置,移动到另一目的点.我们知道这个目的点当然是越随机越好.这个过程

浅谈https\ssl\数字证书[转载]

在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议.http协议直接放置在TCP协议之上,而https提出在http和TCP中间加上一层加密层.从发送端看,这一层负责把http的内容加密后送到下层的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成http的内容.

HTTPS、SSL与数字证书介绍

在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 HTTPS:在HTTP(超文本传输协议)基础上提出的一种安全的HTTP协议,因此可以称为安全的超文本传输协议.HTTP协议直接放置在TCP协议之上,而HTTPS提出在HTTP和TCP中间加上一层加密层.从发送端看,这一层负责把HTTP的内容加密后送到下层的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成HTTP的内容. SSL(Secure Soc

浅谈https\ssl\数字证书

全球可信的SSL数字证书申请:http://www.shuzizhengshu.com 在互联网安全通信方式上,目前用的最多的就是https配合ssl和数字证书来保证传输和认证安全了.本文追本溯源围绕这个模式谈一谈. 名词解释 首先解释一下上面的几个名词: https:在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议.http协议直接放置在TCP协议之上,而https提出在http和TCP中间加上一层加密层.从发送端看,这一层负责把http的内容加

PKI 笔记

PKI – Public Key Infrastructure , 通常翻译为公钥基础设施. PKI 安全平台提供的4个服务,来保证安全的数据,分别是: l  身份识别 l  数据保密 l  数据完整 l  不可抵赖 PKI 体系现存问题 l  密钥管理 l  相关法律体系建立 l  相关法律.政策的缺乏 l  技术各异,国内各个认证机构发放的证书在相互兼容,互通互用的方面存在问题. l  用户认识不足 l  重复建设 l  缺乏统一规范和服务效率 l  安全管理急待加强 PKI基于的理论:公钥