Decode do Encode

Odpowiedz Nowy wątek
2019-05-21 08:13
0

Witajcie, jestem nowy na Tym forum.

Potrzebuje pomocy.

Otóż tak wygląda skrypt Decode + Key


    //Script C++

    FILE *fp        = NULL;
    if ((fp = fopen(FileName, "rb")) == NULL) //Read File
    {
        MessageBox(NULL, "File is not Exist.", "error!", MB_OK);
        return -1;
    }

    CTString strTempPath;
    wchar_t wchPath[MAX_PATH];
    GetTempPathW(MAX_PATH, wchPath);
    int key[200] = { 175, 69, 88, 154, 124, 169, 186, 145, 167, 95, 63, 59, 82, 175, 10, 4, 162, 163, 14, 121, 30, 143, 188, 167, 136, 161, 160, 59, 81, 77, 175, 11, 196, 90, 74, 187, 102, 118, 38, 112, 150, 27, 50, 91, 98, 84, 26, 135, 173, 11, 161, 42, 192, 189, 7, 32, 81, 120, 18, 163, 9, 127, 64, 91, 120, 53, 62, 191, 101, 22, 101, 45, 125, 102, 170, 4, 94, 98, 69, 53, 136, 26, 86, 71, 116, 133, 19, 8, 84, 42, 107, 181, 100,75, 103, 24, 162, 159, 170, 46, 22, 34, 34, 152, 109, 116, 117, 90, 20, 3,138, 183, 51, 164, 27, 183, 42, 193, 175, 187, 35, 55, 107, 60, 114, 119, 144, 50, 199, 146, 41, 134, 127, 24, 31, 102, 191, 133, 161, 199, 16, 128, 187, 81,104, 124, 130, 135, 48, 120, 182, 169, 184, 183, 12, 167, 126, 174, 38, 189, 172,68, 91, 73, 162, 5, 56, 28, 134, 125, 192, 108, 33, 175, 171, 106, 67, 27, 156,190, 189, 10, 2, 79, 164, 72, 150, 144, 13, 63, 176, 17, 96, 171, 28, 148, 37, 114, 119, 99 }; //Any chars will work, in an array of any size
    int key_size = 200;
    int i = 0;
    FILE *fp;
    char mbstr[MAX_PATH];
    std::wcstombs(mbstr, wchPath, MAX_PATH);
    strTempPath.PrintF(mbstr);
    fp = fopen(strTempPath + "tempsa", "w+b");
    int ch;
    while ((ch=getc(fe)) != EOF) {
        putc(ch ^ key[i % key_size], fp);
        i++;
    }

Potrzebowałbym przerobić go na Encode :-) pomoże ktoś?

Pozostało 580 znaków

2019-05-21 08:43
0

Zdaje się, że jest to zwyczajny xor, czyli szyfrowanie następuje w taki sam sposób, jak deszyfrowanie (tj. tym samym kluczem oraz algorytmem) ;-)


edytowany 1x, ostatnio: Patryk27, 2019-05-21 08:43

Pozostało 580 znaków

2019-05-21 09:08
0

A przekształcisz mi to w Funkcje Szyfrowania tego otwartego pliku?

if ((fp = fopen(FileName, "rb")) == NULL) //Read File

Jeśli chcesz gotowca, załóż wątek w dziale Ogłoszenia drobne - jeśli chcesz pomocy, wykaż się inicjatywą (np. próbowałem podejść do tematu w taki i taki sposób, lecz napotkałem takie i takie problemy). - Patryk27 2019-05-21 09:18

Pozostało 580 znaków

2019-05-21 14:31
0

Wracając do tematu

Zrobiłem taki Endoding do pliku

void CFileSecure::EncodeFileAssasinPL( CFile *file )
{
    int size = file->GetLength();
    for (int i = 0; i < size; i++)
    {
    file->Seek(i, CFile::begin);
    int key[200] = { 175, 69, 88, 154, 124, 169, 186, 145, 167, 95, 63, 59, 82, 175, 10, 4, 162, 163, 14, 121, 30, 143, 188, 167, 136, 161, 160, 59, 81, 77, 175, 11, 196, 90, 74, 187, 102, 118, 38, 112, 150, 27, 50, 91, 98, 84, 26, 135, 173, 11, 161, 42, 192, 189, 7, 32, 81, 120, 18, 163, 9, 127, 64, 91, 120, 53, 62, 191, 101, 22, 101, 45, 125, 102, 170, 4, 94, 98, 69, 53, 136, 26, 86, 71, 116, 133, 19, 8, 84, 42, 107, 181, 100,75, 103, 24, 162, 159, 170, 46, 22, 34, 34, 152, 109, 116, 117, 90, 20, 3,138, 183, 51, 164, 27, 183, 42, 193, 175, 187, 35, 55, 107, 60, 114, 119, 144, 50, 199, 146, 41, 134, 127, 24, 31, 102, 191, 133, 161, 199, 16, 128, 187, 81,104, 124, 130, 135, 48, 120, 182, 169, 184, 183, 12, 167, 126, 174, 38, 189, 172,68, 91, 73, 162, 5, 56, 28, 134, 125, 192, 108, 33, 175, 171, 106, 67, 27, 156,190, 189, 10, 2, 79, 164, 72, 150, 144, 13, 63, 176, 17, 96, 171, 28, 148, 37, 114, 119, 99 }; //Any chars will work, in an array of any size
    int key_size = 200;
    file->Write(&key[i % key_size], sizeof(int));
    }
    return;
}

Działa tak jak chciałem,
lecz próbuje zrobić Decode, i mam problem ponieważ nie dekoduje mi,
pomożecie oto mój decode:

bool CFileSecure::DecodeFileAssasinPL( CFile *file )
{
    int size = file->GetLength();
    for (int i = 0; i < size; i++)
    {
    file->Seek(i, CFile::begin);
    int key[200] = { 175, 69, 88, 154, 124, 169, 186, 145, 167, 95, 63, 59, 82, 175, 10, 4, 162, 163, 14, 121, 30, 143, 188, 167, 136, 161, 160, 59, 81, 77, 175, 11, 196, 90, 74, 187, 102, 118, 38, 112, 150, 27, 50, 91, 98, 84, 26, 135, 173, 11, 161, 42, 192, 189, 7, 32, 81, 120, 18, 163, 9, 127, 64, 91, 120, 53, 62, 191, 101, 22, 101, 45, 125, 102, 170, 4, 94, 98, 69, 53, 136, 26, 86, 71, 116, 133, 19, 8, 84, 42, 107, 181, 100,75, 103, 24, 162, 159, 170, 46, 22, 34, 34, 152, 109, 116, 117, 90, 20, 3,138, 183, 51, 164, 27, 183, 42, 193, 175, 187, 35, 55, 107, 60, 114, 119, 144, 50, 199, 146, 41, 134, 127, 24, 31, 102, 191, 133, 161, 199, 16, 128, 187, 81,104, 124, 130, 135, 48, 120, 182, 169, 184, 183, 12, 167, 126, 174, 38, 189, 172,68, 91, 73, 162, 5, 56, 28, 134, 125, 192, 108, 33, 175, 171, 106, 67, 27, 156,190, 189, 10, 2, 79, 164, 72, 150, 144, 13, 63, 176, 17, 96, 171, 28, 148, 37, 114, 119, 99 }; //Any chars will work, in an array of any size
    int key_size = 200;
    file->Read(&key[i % key_size], sizeof(int));
    }
    return size;
}

Pozostało 580 znaków

2019-05-21 14:33
0

Dlaczego zapisujesz do pliku sam klucz?
Nie powinieneś szyfrować jakichś danych?


Pozostało 580 znaków

2019-05-21 14:36
0

Mój programik polega na tym że :
Zczytuje z Bazy danych, zapisuje do pliku z kluczem jest ok
Jednak gdy próbuje zczytać to dostaje błąd

Encodinng pobiera mi długość pliku i zapisuje go na klucz
A decoding chce aby zczytywał klucz i dalej pokazał normalną wartość

edytowany 1x, ostatnio: lordzik112, 2019-05-21 14:37

Pozostało 580 znaków

2019-05-21 14:40
1

Nie rozumiem WTF. Miałeś przecież sensowne decode a teraz dałeś jakieś file->Read(&key[i % key_size], sizeof(int)); totalnie z d**y, które nie robi nic sensownego. A te wszystkie seek i jakieś zapisywanie / czytanie po znaku to już dramat jest.

  1. Wczytaj cały plik
  2. Zrób xora w pętli z tym twoim kluczem
  3. Zapisz wynik

Jest to przepis zarówno dla encode jak i dla decode, bo przecież robią to samo.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
edytowany 1x, ostatnio: Shalom, 2019-05-21 14:42

Pozostało 580 znaków

2019-05-21 14:47
0

Rozumiem, tyle że Jedno narzędzie Zczytuje z DB i zapisuje zaszyfrowany plik, inne narzędzie ma zczytać zaszyfrowany plik poprawnie używając klucza. Chyba teraz dobrze to napisałem

Pozostało 580 znaków

2019-05-21 16:37
1

Jakbyś pisał ten kod po ludzku z zachowaniem zasady jednej odpowiedzialności to nie byłoby problemu. Podziel to na sensowne funkcje a nie pakuj wszystkiego do jednej i nagle nie trzeba będzie copypaste i kombinowania:

  1. Funkcja która czyta zawartość pliku i ją zwraca jako jakiegoś stringa/tablicę
  2. Funkcja która przyjmuje dane, xoruje je z kluczem i zwraca to co wyszło
  3. Funkcja która zapisuje podane dane do pliku

I nagle życie staje się proste bo zarówno decode jak i encode można sobie z tych 3 funkcji złożyć.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2019-05-22 11:36
0

Kodowanie wyciągnięte do osobnej klasy:

class XorCoder {
public:
     template<typename T>
     XorCoder(T b, T e) : secret{ b, e } {}
     XorCoder(std::initializer_list<char> initList) : secret{ initList } {}
     XorCoder(std::string_view sv) : secret{ sv.begin(), sv.end() } {}

     void reset() { index =0; }

     char code(char ch) {
        return ch ^ secret[postIncIndex()];
     }

     template<typename T>
     void code(T b, T e) {
          std::transform(b, e, b, [this](char ch){ return code(ch); });
     }

     template<size_t n>
     void code(char (&tab)[n]) {
         code(std::begin(tab), std::begin(tab));
     }

private:
     size_t postIncIndex() {
        auto i = index++;
        if (index >= secret.size()) index=0;
        return i;
     }

private:
     const std::vector<char> secret;
     size_t index = 0;
};

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22, 2019-05-22 13:45

Pozostało 580 znaków

2019-05-22 12:03
0

Siedzę i się męczę, kompletnie nie ogarniam C++ ;-) a potrzebuje to dodać ponieważ chcę zablokować kilka plików przed edycją niechcianych użytkowników.

to nie kwestia języka, ale brak umiejętności rozdzielania słabo powiązanych rzeczy. To można wytrenować. - MarekR22 2019-05-22 13:48

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0