c语言 数据加密

数据是五位的整数,加密规则如下:每位数字都加上8,然后将和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,第五位不变,要求输出原数据和加密的数据那位... 数据是五位的整数,加密规则如下:每位数字都加上8,然后将和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,第五位不变,要求输出原数据和加密的数据
那位仁兄可以用c写出来?
展开
 我来答
醉梦逍遥生
推荐于2017-10-03 · TA获得超过171个赞
知道答主
回答量:59
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>

void main()
{
int a[5]; /* 存储各位上的数字 */
int num, temp, encripy; /* num是要输入的数,temp是交换时用来存储临时值,encripy是加密后的数据 */
int i;
do
{
printf("Please input the number:");
scanf("%d",&num);
if(!(num/10000 !=0 && num/100000==0))
printf("Data error!\n");
}while(!(num/10000 !=0 && num/100000==0));

a[0] = num/10000%10; /* 求各位上的数字 */
a[1] = num/1000%10;
a[2] = num/100%10; /* 百位上的数字 */
a[3] = num/10%10; /* 十位上的数字 */
a[4] = num%10; /* 个位上的数字 */

for(i = 0; i < 5; ++i) /* 开始加密 */
a[i] = (a[i] + 8)%10;
temp = a[0]; /* 交换位置开始 */
a[0] = a[3];
a[3] = temp;

temp = a[1];
a[1] = a[2];
a[2] = temp; /* 交换位置结束同时加密结束 */

encripy = a[0]*10000 + a[1]*1000 + a[2]*100 + a[3]*10 + a[4]; /* 加密后的数据 */
printf("\nThe scourse number: %d\n", num); /* 输出原数据 */
printf("\nEncripy the number: %d\n\n", encripy); /* 输出加密后的数据 */
}

在VC6.0成功运行,希望对你有帮助!
星月小木木
2016-01-13 · TA获得超过3.2万个赞
知道大有可为答主
回答量:2.4万
采纳率:0%
帮助的人:1亿
展开全部
  1. 什么是异或算法

  2. 异或的特点是原始值经过两次异或某一个数后会变成原来的值,所以有时利用这个特性来进行加密,加密端把数据与一个密钥进行异或操作,生成密文。接收方收到密文后利用加密方提供的密钥进行再次异或操作就能得到明文。

例程:

/*以DWORD为单位对文件进行加密,将每个DWORD与0xfcba0000(密钥)做异或,写入另一个文件*/

#include <stdio.h>
#include <stdlib.h>
#define DWORD unsigned long
#define BYTE unsigned char 
#define false 0
#define true 1
int main(int argc, char *argv[])
{
  FILE *hSource;
  FILE *hDestination;
  
  DWORD dwKey=0xfcba0000;
  char* pbBuffer;
  DWORD dwBufferLen=sizeof(DWORD);
  DWORD dwCount;
  DWORD dwData;
  if(argv[1]==0||argv[2]==0)
  {
    printf("missing argument!\n");
    return false;
  }
  char* szSource=argv[1];
  char* szDestination=argv[2];
 
  hSource = fopen(szSource,"rb");// 打开源文件.
  hDestination = fopen(szDestination,"wb");    //打开目标文件
  if (hSource==NULL) {printf("open Source File error !"); return false ;}
  if (hDestination==NULL){ printf("open Destination File error !");  return false ;}
  
  //分配缓冲区
  pbBuffer=(char* )malloc(dwBufferLen);
  
  do {
    // 从源文件中读出dwBlockLen个字节
    dwCount = fread(pbBuffer, 1, dwBufferLen, hSource);
    //加密数据
    dwData = *(DWORD*)pbBuffer;  //char* TO dword
    dwData^=dwKey;        //xor operation
    pbBuffer = (char *) &dwData;
    // 将加密过的数据写入目标文件
    fwrite(pbBuffer, 1, dwCount, hDestination);
  } while(!feof(hSource));
 
    //关闭文件、释放内存
     fclose(hSource);
     fclose(hDestination);
  
  printf("%s is encrypted to %s\n",szSource,szDestination);
  return 0;
}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hanzhenlll
2010-05-28 · TA获得超过172个赞
知道小有建树答主
回答量:139
采纳率:0%
帮助的人:132万
展开全部
#include <stdio.h>
#define MAX 5
#if 1

int swap (int *p, int len) //交换函数 负责交换 1-4 2-3
{
int tmp;
tmp = p[0];
p[0] = p[3];
p[3] = tmp;

tmp = p[1];
p[1] = p[2];
p[2] = tmp;

return 0;
}
int encrypt (int *p, int len) //加密函数 +8然后跟10 取余
{
while (len--)
{
*p = ((*p)+8)%10;
p++;
}
return 0;
}
#endif
int show (int *p, int len) //显示数组内容函数
{

while (len--)
{
printf ("%3d", *p);
p++;
}
printf ("\n");

return 0;
}
int main (int argc, char *argv[])
{
int a[MAX] = {4,20,11,23,18};
show (a,MAX);
encrypt (a, MAX);
show (a, MAX);
swap (a, MAX);
show (a, MAX);
return 0;
}
================
输出结果:
4 20 11 23 18 //原数
2 8 9 1 6 //加密后
1 9 8 2 6 //更换位置后

兄台记得给分!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
欠墨
2010-05-28 · 超过28用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:76.7万
展开全部
#include<stdio.h>
int test(int testData)
{
int src=testData;
if(!(src/10000!=0 && src/100000==0)
return -1;
int temp;
int temp1;

src+=88888;
src/=10;

temp=src/10000;
temp1=src/10%10;
src-=(temp*10000);
src-=(temp1*10);
src+=(temp1*10000);
src+=(temp*10);

temp=src/1000%10;
temp1=src/100%10;
src-=(temp*1000);
src-=(temp1*100);
src+=temp1*1000;
src+=temp*100;

printf("原数据:%d,加密后数据%d.\n",testData,src);

};

int main()
{
int testData = 12345;
test(12345);
return 0;
}

//注:第一位是指最高位。如果不是这个意思,可以修改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式