铁栅栏密码的{C ++程序

时间:2015-09-17 18:06:55

标签: c++

当我运行以下程序时,我在str1和str2.So

中得到了垃圾值
#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 个答案:

答案 0 :(得分:2)

您的str1str2未终止。将变量定义更改为str1[10]={},str2[10]={} example

答案 1 :(得分: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]);
}

答案 2 :(得分:-1)

这是我的铁栅栏代码,更容易理解 https://cprograms4future.blogspot.in/p/list-of-all-c-programs.html?m=1

vector< vector<obj> >

答案 3 :(得分:-1)

它将文本加密到铁栅栏。我的代码中的逻辑采用字符串并将它们转换为ascii数字。如果你采用铁栅栏的逻辑,如果它的轨道为3.00,11,22,文本就会以这种方式存储,13,04,15,26,..这意味着行将在0-2和2-0之间切换,但列将始终增加。存储后,如果代码[]没有0,则将打印代码,因为我们已初始化它之前为零。我的代码将适用于所有条件。一旦尝试并删除不喜欢。如果你仍然不明白邮寄我mahidharguggilam123@gmail.com。所以我明天会发给你图像解释。

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以获取此计划