0

テキスト ファイルを復号化し、プログラムで読み取れるようにするための助けが必要です..

これまでにプログラムしたことは、暗号化されたファイルを読み取り、新しいファイルを作成し、それを復号化し、新しく作成されたファイルを読み取ることです..

復号化されたテキストを読み取る新しいファイルを作成することなく、暗号化されたファイルを復号化する必要があります..

さて、私のコードをお見せしましょう:

PSインクルードのほとんどは必要ありません。私はすでにそれを知っています

Visual Studio 2010 Windows フォーム アプリケーション CLR

#pragma once


#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <iomanip>


namespace EncryptandDecryptfiletest {


using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace System::IO;
using namespace std;


private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {


             /*Decryption --- When program loads*/


             char ch,mod;
             char key = 97;
             char name[100] = "Encrypted.txt";
             char target[100] = "TTO.txt";
             ifstream fin("Encrypted.txt", ios::binary); // Reading file
             if(!fin) //open the encrypted file in a binary mode
             {
                 MessageBox::Show("Encrypted.txt did not open"); //If file does not exist
             } //or any kind of error

             ofstream fout;
             fout.open(target,ios::binary); //Opens outputfile
             if(!fout)
             { //Show error if any error occurs in opening new file
                 MessageBox::Show("TTO.txt did not open");
             }
             while(fin.get(ch))
             { // opens the Encrypted file
                 if(ch==EOF)break;
                 mod = ch + key;
                 if (mod > 255 ) mod -= 255;
                 fout << mod; //Writes decrypted text to TTO.txt
             }
             fin.close(); //Close the encrypted file
             fout.close(); // Close the decrypted file
         }
private: System::Void comboBox1_SelectedIndexChanged(System::Object^  sender, System::EventArgs^  e) {


             label1->Text = comboBox1->Text;
             pictureBox1->Load("Images\\" + comboBox1->SelectedItem->ToString() + ".png");


             //String^ openFileTest = "Encrypted.txt"; // Opens the encrypted .txt file
             String^ openFileTest = "TTO.txt"; //Opens the newly created file that is decrypted


             try  //Reading the .txt file
             {
                 StreamReader^ DataIn = File::OpenText(openFileTest);
                 String^ DataStr;
                 int count = 0;
                 array<String^>^ result;
                 array<Char>^ separ = gcnew array<Char>{'"'}; //After each Quote gets a new value of result[x]


                 while((DataStr = DataIn->ReadLine()) != nullptr)
                 {
                     count++;
                     result = DataStr->Split(separ);
                     if(comboBox1->Text == result[0]) // result[0] = Name
                     {
                         textBox1->Text = result[1]; //reads first word in txt file
                         textBox2->Text = result[2]; //second word in txt file
                         textBox3->Text = result[3]; //third word in txt file
                     }
                 } // ends while()
             } // ends try
             catch (Exception^ e)
             {
                 if(dynamic_cast<FileNotFoundException^>(e))
                     MessageBox::Show("File " + openFileTest + " not found");
             }
         } // Ends comboBox1_SelectedIndexChanged void
 };
}

あなたは私の解読コードと私が使いたいコードを持っています..

私が説明するのはかなり難しいので、あなたのコンピュータで使用するコードをアップロードしました..

暗号化されたファイルを復号化するために新しいファイルを作成することなく、プログラムで暗号化されたファイルを読み取れるようにしたい..

誰かが私を助けてくれることを願っています

復号化および暗号化された.txtファイルが含まれています(および画像)

--> プログラム .rar パックリンク<--

Visual Studio 2010 でビルドする

4

1 に答える 1

0

出力ファイル ストリームをMemoryStream.

最初に行うことは、関数に分解することです。ストリームをバイトごとに読み取るため、リーダーは必要ありません。これは良いことです。

void Decrypt(Stream^ input, Stream^ output)
{
    char key=97;
    int byteRead;
    while((byteRead=input->ReadByte()) >= 0)
    {
        char ch = (char)byteRead;
        char mod = (char)(ch+key)
        output->WriteByte(mod);
    }
}

//When loading
MemoryStream^ ms = gcnew MemoryStream();
{
    FileStream^ fs = File::OpenRead(L"encrypted.txt");
    Decrypt(fr, ms);
    delete fs;
}

ms.Seek(0, SeekOrigin::Begin);

//Later, read from the memory stream
于 2013-10-03T14:24:17.150 に答える