2015-09-17 52 views
1

當我運行下面的程序我str1中有垃圾的價值和str2.SoC++程序的柵欄密碼

#include<iostream> 
#include<string.h> 
#include<string> 
using namespace std; 

int main() 
{ 
    int i,len,j=0,k=0; 
    char plain[15],cip[15],str1[10],str2[10]; 
    cout<<"Enter Plain Text:"; 
    cin>>plain; 
    cout<<endl; 
    len=strlen(plain); 
    for(i=0;i<len;i++) 
    { 
     if(i%2==0) 
     { 
      str1[j]=plain[i]; 
      j++; 
     } 
     else 
      { 
       str2[k]=plain[i]; 
       k++; 
      } 
     } 
    j=0; 

    cout<<"Str1:"<<str1<<endl<<"Str2:"<<str2; 
} 

輸出:

enter image description here

+4

什麼是「鐵路的fance」? – mattnewport

+1

看起來您正在實施[Rail Fence Cipher](https://en.wikipedia.org/wiki/Rail_fence_cipher)? – mattnewport

+1

你忘了'str1 [j] ='\ 0'; str2 [k] ='\ 0';'在循環之後,所以輸出在有用內容之後繼續,直到偶爾命中爲零。 –

回答

2

str1str2不爲空終止。將變量定義更改爲str1[10]={},str2[10]={}example

+0

你是對的,我觀察到在終止它之後,它的工作完美無缺。歡迎光臨 – Sanjeeb

2
#include<bits/stdc++.h> 
void encode(int num_rails,char plain_text[],char cipher_text[]) 
{ 
    int i=0,j=0,k=0; 
    for(i=1;i<=num_rails;i++) 
    { 
     if(i==1||i==num_rails) 
     { 
      for(j=i-1;j<strlen(plain_text);j+=2*(num_rails-1)) 
      { 
       cipher_text[k++]=plain_text[j];    
      }       
     } 
     else 
     { 
      cipher_text[k++]=plain_text[i-1]; 
      for(j=i-1;j<strlen(plain_text);) 
      { 
       int x=0; 
       x++; 
       if(x%2==1) 
       { 
        j=j+2*(num_rails-i); 
       } 
       else 
       { 
        j=j+2*(i-1);       
       } 
       cipher_text[k++]=plain_text[j]; 
      }  
     } 
    } 
    cipher_text[10]='\0'; 
} 
void decode(int num_rails,char cipher_text[],char decrypt_text[],int length) 
{ 
    int i=0,j=0,k=0; 
    int y=strlen(cipher_text); 
    //printf("%d\n",y); 
    for(i=1;i<=num_rails;i++) 
    { 
     if(i==1||i==num_rails) 
     { 

      for(j=i-1;j<length;j+=2*(num_rails-1)) 
      { 
       decrypt_text[j]=cipher_text[k++]; 
       //printf("%d\n",j);   
      } 
     }       
     else 
     { 
      decrypt_text[i-1]=cipher_text[k++]; 
      for(j=i-1;j<length;) 
      { 
       int x=0; 
       x++; 
       if(x%2==1) 
       { 
        j=j+2*(num_rails-i); 
       } 
       else 
       { 
        j=j+2*(i-1);       
       } 
       decrypt_text[j]=cipher_text[k++]; 
      } 
     } 
    } 
} 
int main() 
{ 
    char plain_text[100],cipher_text[100],decrypt_text[100]; 
    printf("ENTER PLAIN TEXT\n"); 
    scanf("%s",plain_text); 
    int num_rails,i; 
    printf("ENTER NO OF RAILS\n"); 
    scanf("%d",&num_rails); 
    int x=strlen(plain_text); 
    encode(num_rails,plain_text,cipher_text); 
    printf("CIPHER TEXT IS:"); 
    for(i=0;i<=x;i++) 
    printf("%c",cipher_text[i]); 
    printf("\n"); 
    printf("DECRYPTED TEXT IS:"); 
    decode(num_rails,cipher_text,decrypt_text,x); 
    for(i=0;i<=x;i++) 
    printf("%c",decrypt_text[i]); 
} 
-1

這是我的柵欄哪一個更容易的和可以理解 https://cprograms4future.blogspot.in/p/list-of-all-c-programs.html?m=1

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 
main() 
{ 
    int i,j,len,rails,count,code[100][1000]; 
    char str[1000]; 
    printf("Enter a Secret Message"); 
    gets(str); 
    len=strlen(str); 
    printf("Enter number of rails\n"); 
    scanf("%d",&rails); 
    for(i=0;i<rails;i++) 
    { 
     for(j=0;j<len;j++) 
     { 
      code[i][j]=0; 
     } 
    } 
count=0; 
j=0; 
while(j<len) 
{ 
if(count%2==0) 
{ 
    for(i=0;i<rails;i++) 
    { 
     //strcpy(code[i][j],str[j]); 
     code[i][j]=(int)str[j]; 
     j++; 
    } 

} 
else 
{ 

    for(i=rails-2;i>0;i--) 
    { 
     code[i][j]=(int)str[j]; 
    j++; 
    }  
} 

count++; 
} 

for(i=0;i<rails;i++) 
{ 
    for(j=0;j<len;j++) 
    { 
     if(code[i][j]!=0) 
     printf("%c",code[i][j]); 
    } 

} 
} 
+1

歡迎來到Stack Overflow!雖然這段代碼可能會回答這個問題,但最好包含關於問題的描述,以及代碼如何解決給定問題。對於將來,這裏是一些信息,[如何破解一個真棒回答](http://stackoverflow.com/help/how-to-answer)在堆棧溢出。 – dirtydanee

+0

它加密一個文本到柵欄。我的代碼中的邏輯取一個字符串並將它們轉換爲ASCII數字。如果採用柵欄的邏輯,文本以這種方式存儲,如果它的軌道是3.00,11,22,13 ,04,15,26,..這意味着行將在0-2和2-0之間切換,但列將始終增加。存儲後,如果代碼[]沒有0,代碼將被打印,因爲我們已初始化爲零代碼。我的代碼將在所有條件下工作。一旦嘗試它,並刪除不喜歡。如果你還不明白郵件我[email protected]。因此,我明天將向你發送圖像說明。 –

+0

https://2.bp.blogspot.com/--o1cJBQwZ3A/WHKhaF-gFqI/AAAAAAAAFaA/bf5hrVB04OEbd0fvhn5oiNTtzdvhTmimQCLcB/s1600/IMG_20170109_015001.jpg –

-1

它加密在我的代碼文本鐵路fence.Logic正在一個字符串,並把它們轉換成ASCII碼碼。如果採用柵欄的邏輯,如果軌道是3.00,11,22,13,04,15,26,則文本以這種方式存儲。這意味着行將在0-2和2-0之間切換,但是列將始終增加。存儲後,如果代碼[]沒有0,代碼將被打印,因爲我們已初始化爲零。我的代碼將適用於所有條件。一旦嘗試它,並消除不喜歡。如果你還不明白郵件給我[email protected]。所以我明天將向你發送圖片說明。

https://2.bp.blogspot.com/--o1cJBQwZ3A/WHKhaF-gFqI/AAAAAAAAFaA/bf5hrVB04OEbd0fvhn5oiNTtzdvhTmimQCLcB/s1600/IMG_20170109_015001.jpg

這是我製作並保存在我的博客的解釋。如果你想訪問我的博客訪問它在https://cprograms4future.blogspot.in/p/encryption-rail-fence-cipher.html?m=1這個節目