私の暗号プログラムと同様に機能する暗号プログラムを作成します。•ユーザーに秘密鍵の入力を求め、それを使用して乱数ジェネレーターのシードを計算します。•ユーザーに入力ファイルの名前とコード化された出力を与えるように促します。デコードされたファイル•ユーザーの秘密鍵から取得したシードを使用して、乱数ジェネレーターから乱数のシーケンスを作成します。•次のようにランダムビットrを使用してビットxのコーディングを実行します。x⊕=r•∀r∈{0,1}、r⊕r= 0であるため、同じランダムバイトシーケンスと同じ操作xを使用してデコードを実行します。 ⊕=r。デコードは、演算x⊕r⊕r=x⊕(r⊕r)=x⊕0=xに基づいています。
以下は暗号化に機能するコードですが、復号化に関しては、暗号文には3文字しか含まれていません。デコードが機能しない理由を理解できませんでした。Dev-C++を使用しています。あなたの助けは非常に高く評価されます。
#include<iostream>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<fstream>
using namespace std;
int main()
{
char n, line[1024], keystring[100]; char FitoEncr[100], NewFiCrypt[100];
char FiletobeDecrypted[100];
ifstream IS ("FitoEncr.txt", ios::in);
ofstream OS ("NewFiCrypt.txt", ios::out);
unsigned int psswd=0, number;
cout<<"Please, enter a secret key :";
cin.getline(keystring, 100);
for( int i=0;keystring[i]!='\0'; i++)
psswd=(psswd+3)*keystring[i];
cout<<"initial password: "<<keystring<<endl;
cout<<"encrypted password: "<<psswd<<endl;
cout<<"please, enter the name of the input file: ";
cin.getline(FitoEncr,20);
cout<<"please, enter the name of the output file: ";
cin.getline(NewFiCrypt,20);
srand(psswd); //not sure about creating the sequence of random bytes from a...
number=rand() % 255; //random number generator with the seed obtained from user's secret key
//ENCRYPTION
while(IS.get(n))
{
if(IS.get(n))
{
n^=rand();
OS<<n;
cout<<"character coded:"<<n;
}
}
IS.close();
OS.close();
//DECRYPTION
ifstream IS1;
ofstream OS1;
IS1.open("NewFiCrypt.txt", ios::in);
OS1.open("FilDecr.txt", ios::out);
while(IS1.get(n))
{
if(IS1.get(n))
{
n^=rand(); //I think the problem starts on this line...
OS1<<n;
cout<<"character coded:"<<n;
}
}
IS1.close();
OS1.close();
getch();
return 0;
}