密鑰短語密碼加密,解密同理。

//密鑰短語密碼,密鑰不能太長!!vc++6.0成功 c++

#include <stdio.h>
#include <malloc.h>
#include <string.h>
int str_len(char *str)
{
 int len = 0;
 while(*(str++))
  len++;
 return len;
} 數據結構

int main(int argc, char *argv[])
{
 char *str=NULL;
 str=(char*)malloc(127);
 printf("請輸入密鑰必須大寫字母(得修正):");
 gets(str);
 int s = str_len(str);
 int v=s;
 //重複字母替換成#號
 for(int i = 0;i<s-1;i++)
  for(int j = i+1;j<s;j++)
  {         
   if(str[i]==str[j])
   {
    str[j]='#';
   }
  }
 // printf("%s\n",str);
  
 char *p=str;
 //將#號刪除,像數據結構中的順序表,覆蓋前面的。
 while(*p != '\0')
   { 
  if(*p=='#')
  {  
    while(*p != '\0')
   {   
     *p=*(p+1);   
        p++;
   }
   p=str;//指針清零,這塊想了很久一直BUG 加密

  }
    else p++;
 
 }
 //處理最後一個字母是重複的狀況
  if(str[str_len(str)-1]=='#')
   str[str_len(str)-1]=NULL;
 //輸出刪除後的字符
//  printf("輸出刪除後的字符:");
//  printf("%s\n",str);
 
 
 int e = str_len(str);
 int f=e;
 char a[27] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'};
 char b[27] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','\0'};
 for(int o = 0;o<25;o++)
  for(int j = 0;j<e;j++)
  {         
   if(b[o]==str[j])
   {
    b[o]='#';
   }
  }
 // printf("%s\n",str);
  
 char *pp=b;
 //將#號刪除,像數據結構中的順序表,覆蓋前面的。
 while(*pp != '\0')
   { 
  if(*pp=='#')
  {  
    while(*pp != '\0')
   {   
     *pp=*(pp+1);   
        pp++;
   }
   pp=b;//指針清零,這塊想了很久一直BUG 指針

  }
    else pp++;
 
 }
 //處理最後一個字母是重複的狀況
  if(b[25]=='#')
   b[25]=NULL;
 
 // printf("%s\n",str);
//  printf("去除與str相同的字母");
//  printf("%s\n",b);
 
 char *ss;
 ss=(char*)malloc(27);
 int t;
 memset(ss,'0',26);
 ss[26]=NULL; get

 
 for(i=0;i<str_len(str);i++,s++)
 {
  ss[s] = str[i];
//  printf("i=...%d,s=...%d\n",i,s);
  
 }
 t=s;
// printf("t=%d",t);
// printf("把str放入ss中....:");
// printf("%s\n",ss);
 for(i = 0;i<26-t;i++,s++)
 {
  ss[s] = b[i];
 }
 
 //printf("把b一部分放入ss中....:");
// printf("%s\n",ss);
// printf("i....=%d",i);
 for(int j=0;j<v;i++,j++)
 {
  ss[j]=b[i];
//  printf("B....%c,",b[j]);
// printf("SS...,,",ss[j]);
// printf("%s\n",ss);
 }
 //輸出加密後的字母表
// printf("把b另外一部分放入ss中....:");
// for(int w=0;w<26;w++)
// printf("%c",ss[w]);
// printf("\n");
//對輸入的內容進行操做
 char sstr[50];
 
 printf("請輸入正文(必須是小寫字母待修正) :");
 gets(sstr);
 
 int len = str_len(sstr);
 for( i = 0;i<len;i++)
  for(int j=0;j<26;j++)
  {
   if(sstr[i]==a[j])
    sstr[i]=ss[j];
   else
    sstr[i]=sstr[i];
  }
  printf("加密結果爲:");
  printf("%s\n",sstr);
  
 
 return 0;
} string

/*
昨天寫的。寫的不是很完善,但願提出改進意見。 io

*/ gc

相關文章
相關標籤/搜索