Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szyfrowanie - wprowadzanie klucza

Ostatnio zmodyfikowano 2018-01-01 18:55
Autor Wiadomość
angelstoflyyx
Temat założony przez niniejszego użytkownika
Szyfrowanie - wprowadzanie klucza
» 2017-12-30 17:51:38
Witam. Mam problem z zadaniem, a raczej jego częścią. *Szyfr polialfabetyczny to jedna z technik szyfrowania podstawieniowego, w której zmianie ulegają kody liter. Jest to szyfr, w którym do czynienia mamy z tekstem do zaszyfrowania oraz z kluczem (zawierającym liczby pozwalające na zmianę kodów znaków w szyfrowanym tekście). Klucz może jednak być krótszy niż tekst do zaszyfrowania, w takim wypadku należy go wykorzystać ponownie od początku tyle razy by zaszyfrować wszystkie znaki. Przykład szyfrowania z kluczem czteroelementowym: {3,1,2,2} *

Hasło , długość klucza i klucz podaany jest z klawiatury. Mam jednak problem z sytuacją, w której klucz jest krótszy od hasła, np aaaaaa, dł klucza 3, 1 2 3.

Wpadłam na pomysł, żeby wprowadzić te dane do tablicy (skoro znamy długość hasła i długość klucza to możemy wprowadzić klucz tyle razy do tablicy, by była ona długości hasła, czyli dla hasła "aaaaaa", 3, 1 2 3 byłoby to 1 2 3 1 2 3). Tylko to, co napisałam, niestety nie działa, nie jestem też pewna, czy do stringa można podstawiać wartości z tablicy int?

C/C++
#include <iostream>
using namespace std;
int g[ 250 ];
int c[ 250 ];
int main()
{
    string s;
    cin >> s;
    int klucz;
    cin >> klucz; //dlugosc klucza
    int k; //poszczegolne elementy klucza
   
    float b = s.size() / klucz;
    int z = b;
    if( b - z == 0 );
    else b = b + 1; //tyle razy trzeba wykonac szyfrowanie
   
    for( int i = 0; i < klucz; i++ ) //nie dziala
    {
        cin >> k;
        g[ i ] = k;
    }
   
   
    int i = 0;
    for( int j = 0; i < s.size(); j = j + klucz )
    {
        c[ j ] = g[ i ];
        i++;
    }
   
    for( int i = 0; i < s.size(); i++ )
    {
        cout << c[ i ];
    }
   
   
    //w tym momencie powinno mi wypisac tablice z powielonym kluczem. A ponizej reszta programu, rowniez niedzialajaca:
   
   
   
    for( int i = 0; i < b; i = i + klucz )
    {
        for( int j = 0; j < s.size(); j++ )
        {
           
            s[ j ] = s[ j ] + g[ j ];
            if(( unsigned int ) s[ i ] >( unsigned int ) 'z' ) s[ i ] = s[ i ] - 26;
           
        }
    }
   
   
    cout << s;
}

return 0;
}
P-168246
pekfos
» 2017-12-30 21:28:12
możemy wprowadzić klucz tyle razy do tablicy, by była ona długości hasła
Można, jeśli koniecznie chcesz sobie utrudniać.
C/C++
for( int i = 0; i < plaintext_size; ++i )
     ciphertext[ i ] = f( plaintext[ i ], key[ i % key_size ] );
P-168253
latajacaryba
» 2017-12-30 22:11:43
Jak rozumiem, chodzi o przesunięcie danej litery o n miejsc w alfabecie, gdzie n to liczba w kluczu, o indeksie takim, jak zmieniany znak?

aaa
123

bcd?

C/C++
int main()
{
    std::string Key;
    std::string Text;
   
    std::getline( std::cin, Text );
    std::getline( std::cin, Key );
    int KeyIndex = 0;
   
    for( int j = 0; j < Text.size(); j++ )
    {
        Text[ j ] +=(( int ) Key[ KeyIndex++ ] - '0' ); // zamiana znaku '0' do '9' na wartość liczbową od 0 do 9
        if( KeyIndex == Key.size() )
             KeyIndex = 0;
       
    }
   
    std::cout << "szyfr: " << Text << "\n";
   
    KeyIndex = 0;
   
    for( int j = 0; j < Text.size(); j++ )
    {
        Text[ j ] -=(( int ) Key[ KeyIndex++ ] - '0' );
        if( KeyIndex == Key.size() )
             KeyIndex = 0;
       
    }
    std::cout << "deszyfracja: " << Text;
}
Do tego dorób sobie sprawdzanie, czy wszystkie znaki w Key są znakami '0' - '9', albo zabezpieczenie, żeby
Text[ j ] +=(( int ) Key[ KeyIndex++ ] - '0' );
 było 0 <= Text[j] <= 255

PS. błagam, bez nazw a,b,c,d,e,f,k tegoż sie nie da czytać
P-168261
angelstoflyyx
Temat założony przez niniejszego użytkownika
» 2018-01-01 18:55:16
Dziekuje Wam bardzo
P-168330
« 1 »
  Strona 1 z 1