今天有位群里的兄弟想给自己的程序员女朋友表白,但是不知道怎么样弄?于是起哄的同学们就提出字符串加密,然后给她密文和方法,让妹子自己来解密!
下面是自己百无聊赖做的一个扯咸蛋的方法,供大家瞎玩。由于ASCII只能到127,超出之后就会显示一些类似于中文的乱码,我想妹子看到肯定会讨厌,所以大伙在改动的时候注意了,可惜俺还是单身啊!……>>_<<……
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 256
#define _DEBUG_
#ifdef _DEBUG_
#define DBG(fmt, args) fprintf(stdout,"DBG: "fmt, ## args)
#else
#define DBG(fmt, args)
#endif
#define ERR(fmt, args) fprintf(stderr,"ERR: "fmt, ## args)
void exchage(char *src, int len, int mode)
{
int i=0;
char ch;
switch(mode)
{
case 0:
for(i=0;i<len/2;i++)
{
ch = src[i];
src[i] = src[len-1-i];
src[len-1-i] = ch;
}
break;
case 1:
for(i=0;i<len-1;i+=2)
{
ch = src[i];
src[i] = src[i+1];
src[i+1] = ch;
}
break;
default: break;
}
}
int main(int argc, char* argv[])
{
int i=0,j=0;
char s[MAXLEN]={0};
char *src = NULL;
char *cipher=NULL;
char ch = 0;
while(1)
{
if(ch == '1')
{
printf("encode string:");
fflush(stdin);
memset(s,0,MAXLEN);
/* 最后的换行符0x0a一起接收进来算在len中 */
fgets(s,MAXLEN,stdin);
int len = strlen(s)-1;
src = (char *)malloc((len+1)*sizeof(char));
cipher = (char *)malloc((len+1)*sizeof(char));
strncpy(src,s,len);
src[len] = '\0';
i=0;
while(src[i])
{
cipher[i] = src[i]+i;
i++;
}
cipher[len] = '\0';
exchage(cipher,len,1);
exchage(cipher,len,0);
printf("%s\n",cipher);
free(src);
}
else if(ch == '2')
{
printf("decode string:");
fflush(stdin);
memset(s,0,MAXLEN);
fgets(s,MAXLEN,stdin);
int len = strlen(s)-1;
src = (char *)malloc((len+1)*sizeof(char));
cipher = (char *)malloc((len+1)*sizeof(char));
strncpy(src,s,len);
src[len] = '\0';
exchage(src,len,0);
exchage(src,len,1);
i=0;
while(src[i])
{
cipher[i] = src[i]-i;
i++;
}
cipher[len] = '\0';
printf("%s\n",cipher);
free(src);
}
else if(ch == '3')
break;
printf("\n1:encode 2:decode 3:exit\nInput: ");
ch = getchar();
}
free(cipher);
printf("GameOver!\n");
return 0;
}
代码太简单,就不解释了,看一下测试结果: