忠懿吧 关注:3贴子:40
  • 3回复贴,共1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void table(char *keyword) /*筛选密钥(去重复去空格)*/
{
inti,j,k;
for(i=0;*(keyword+i)!='\0';i++)
{
for(j=i;*(keyword+j)!='\0';j++)
{
if(i!=j)
if(*(keyword+i)==*(keyword+j)||*(keyword+j)=='')
{
for(k=j;*(keyword+k)!='\0';k++)
*(keyword+k)=*(keyword+k+1);
j--;
}
}
}
}
void newTab(char *keyword) /*生成密钥表*/
{
charch;
inti;
intt;
for(t=0;*(keyword+t)!='\0';t++);
for(ch='a';ch<='z';ch++)
{
for(i=0;*(keyword+i)!=ch;i++)
{
if(*(keyword+i)=='\0')
{
*(keyword+t)=ch;
t++;
break;
}
}
}
*(keyword+t)='\0';
}
char *Ciphertext(char *keyword,char*Plaintext) /*按密码表加密*/
{
charch;
inti,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;ch<='z';ch++,j++)
{
if(*(Plaintext+i)==ch)
{
*(Plaintext+i)=*(keyword+j);
break;
}
}
}
returnPlaintext;
}
char *Decrypt(char *keyword,char*Plaintext) /*解密*/
{
charch;
inti,j;
for(i=0;*(Plaintext+i)!='\0';i++)
{
for(ch='a',j=0;*(keyword+j)!='\0';ch++,j++)
{
if(*(Plaintext+i)==*(keyword+j))
{
*(Plaintext+i)=ch;
break;
}
}
}
returnPlaintext;
}
void main()
{
char*keyword,*Plaintext,*tmp=NULL;
keyword=(char*)malloc(sizeof(char));
Plaintext=(char*)malloc(sizeof(char));
printf("Inputkey word:"); /*输入欲用密钥*/
gets(keyword);
printf("InputPlaintext:"); /*输入要转换的明文*/
gets(Plaintext);
table(keyword); /*去空格去重复*/
newTab(keyword);/*生成密码表*/
tmp=Ciphertext(keyword,Plaintext);/*对应着密码表生成密文*/
puts(tmp);/*输出密文*/
puts(Decrypt(keyword,tmp));/*解密输出*/
}


1楼2015-10-08 16:23回复
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void table(char *keyword) /*筛选密钥(去重复去空格)*/
    {
    int i,j,k;
    for(i=0;*(keyword+i)!='\0';i++)
    {
    for(j=i;*(keyword+j)!='\0';j++)
    {
    if(i!=j)
    if(*(keyword+i)==*(keyword+j)||*(keyword+j)==' ')
    {
    for(k=j;*(keyword+k)!='\0';k++)
    *(keyword+k)=*(keyword+k+1);
    j--;
    }
    }
    }
    }
    void newTab(char *keyword) /*生成密钥表*/
    {
    char ch;
    int i;
    int t;
    for(t=0;*(keyword+t)!='\0';t++);
    for(ch='a';ch<='z';ch++)
    {
    for(i=0;*(keyword+i)!=ch;i++)
    {
    if(*(keyword+i)=='\0')
    {
    *(keyword+t)=ch;
    t++;
    break;
    }
    }
    }
    *(keyword+t)='\0';
    }
    char *Ciphertext(char *keyword,char *Plaintext) /*按密码表加密*/
    {
    char ch;
    int i,j;
    for(i=0;*(Plaintext+i)!='\0';i++)
    {
    for(ch='a',j=0;ch<='z';ch++,j++)
    {
    if(*(Plaintext+i)==ch)
    {
    *(Plaintext+i)=*(keyword+j);
    break;
    }
    }
    }
    return Plaintext;
    }
    char *Decrypt(char *keyword,char *Plaintext) /*解密*/
    {
    char ch;
    int i,j;
    for(i=0;*(Plaintext+i)!='\0';i++)
    {
    for(ch='a',j=0;*(keyword+j)!='\0';ch++,j++)
    {
    if(*(Plaintext+i)==*(keyword+j))
    {
    *(Plaintext+i)=ch;
    break;
    }
    }
    }
    return Plaintext;
    }
    void main()
    {
    char *keyword,*Plaintext,*tmp=NULL;
    keyword=(char*)malloc(sizeof(char));
    Plaintext=(char*)malloc(sizeof(char));
    printf("Input key word:"); /*输入欲用密钥*/
    gets(keyword);
    printf("Input Plaintext:"); /*输入要转换的明文*/
    gets(Plaintext);
    table(keyword); /*去空格去重复*/
    newTab(keyword); /*生成密码表*/
    tmp=Ciphertext(keyword,Plaintext); /*对应着密码表生成密文*/
    puts(tmp); /*输出密文*/
    puts(Decrypt(keyword,tmp)); /*解密输出*/
    }


    2楼2015-10-08 16:38
    回复
      2025-09-27 22:21:19
      广告
      不感兴趣
      开通SVIP免广告
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      void table(char *keyword) /*筛选密钥(去重复去空格)*/
      {
      int i,j,k;
      for(i=0;*(keyword+i)!='\0';i++)
      {
      for(j=i;*(keyword+j)!='\0';j++)
      {
      if(i!=j)
      if(*(keyword+i)==*(keyword+j)||*(keyword+j)==' ')
      {
      for(k=j;*(keyword+k)!='\0';k++)
      *(keyword+k)=*(keyword+k+1);
      j--;
      }
      }
      }
      }
      void newTab(char *keyword) /*生成密钥表*/
      {
      char ch;
      int i;
      int t;
      for(t=0;*(keyword+t)!='\0';t++);
      for(ch='a';ch<='z';ch++)
      {
      for(i=0;*(keyword+i)!=ch;i++)
      {
      if(*(keyword+i)=='\0')
      {
      *(keyword+t)=ch;
      t++;
      break;
      }
      }
      }
      *(keyword+t)='\0';
      }
      char *Ciphertext(char *keyword,char *Plaintext) /*按密码表加密*/
      {
      char ch;
      int i,j;
      for(i=0;*(Plaintext+i)!='\0';i++)
      {
      for(ch='a',j=0;ch<='z';ch++,j++)
      {
      if(*(Plaintext+i)==ch)
      {
      *(Plaintext+i)=*(keyword+j);
      break;
      }
      }
      }
      return Plaintext;
      }
      char *Decrypt(char *keyword,char *Plaintext) /*解密*/
      {
      char ch;
      int i,j;
      for(i=0;*(Plaintext+i)!='\0';i++)
      {
      for(ch='a',j=0;*(keyword+j)!='\0';ch++,j++)
      {
      if(*(Plaintext+i)==*(keyword+j))
      {
      *(Plaintext+i)=ch;
      break;
      }
      }
      }
      return Plaintext;
      }
      void main()
      {
      char *keyword,*Plaintext,*tmp=NULL;
      keyword=(char*)malloc(sizeof(char));
      Plaintext=(char*)malloc(sizeof(char));
      printf("输入欲用密钥:"); /*输入欲用密钥*/
      gets(keyword);
      printf("输入要转换的明文:"); /*输入要转换的明文*/
      gets(Plaintext);
      table(keyword); /*去空格去重复*/
      newTab(keyword); /*生成密码表*/
      tmp=Ciphertext(keyword,Plaintext); /*对应着密码表生成密文*/
      printf("输出密文:");
      puts(tmp); /*输出密文*/
      printf("解密输出:");
      puts(Decrypt(keyword,tmp)); /*解密输出*/
      }


      3楼2015-10-08 17:01
      回复
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
        void Permutation()/*置换密码*/
        {
        char c[100],*q;
        int *key,len,m,i,j=0;
        system("cls");
        printf("********Permutation Cipher(置换密码)********\nPlease input primal sentence(请输入最初的明文): ");
        gets(c);
        strcpy(c,strupr(c));
        len=strlen(c);
        for(i=0;i<len;i++)
        {
        if(c[i]<65||c[i]>90)
        {
        for(j=i; j<len-1; j++)
        c[j] = c[j+1];
        len--;
        }
        }
        c[len] = '\0';
        printf("输入密钥长度: ");
        scanf("%d", &m);
        key = (int*)malloc(m*sizeof(int));
        q = (char *)malloc(len*sizeof(int));
        printf("输入密钥: ");
        for(i=0; i<m; i++)
        {
        scanf("%d", key+i);
        key[i]--;
        }
        getchar();
        for(i=0; i<len; i++)
        {
        j = (i/m)*m;
        q[i] = c[*(key+i%m)+j];
        }
        q[i] = '\0';
        printf("Result is: %s\n", q);
        for(i=0, j=0; i<len; i++)
        {
        j = (i/m)*m;
        c[*(key+i%m)+j] = q[i]+32;
        }
        c[len] = '\0';
        printf("After translated the sentence,we can see the primal sentence as follow:\n%s\n", c);
        printf("Press any key to return(按任何键返回)...");
        free(key);
        free(q);
        getch();
        }
        int main()
        {
        char i = '0';
        system("cls");
        Permutation();
        //system("pause");
        //return 0;
        }


        4楼2015-10-08 17:31
        回复