[Help]Kryptografia - program

bandito88

Użytkownik
Dołączył
Sierpień 8, 2007
Posty
114
Witam wszystkich,
Mam wielką prośbę, czy ktoś by mi pomógł w napisaniu prostego programu szyfrującego i deszyfrującego wpisany ciąg znaków, na dowolnym algorytmie szyfrującym. Jest to mi bardzo potrzebne(do zaliczenia przedmiotu), a niestety programowanie to moja pięta Achillesa
<
<

Z góry dzięki za okazaną pomoc.
smile.gif

//Edit
Postawie piwo
smile.gif
 

mrx1

Użytkownik
Dołączył
Kwiecień 2, 2006
Posty
94
Uściślij kilka rzeczy:
- podaj język programowania
- dowolny algorytm szyfrowania? Czyli nawet przestawienie literek w alfabecie o jedną do przodu? Czy dowolny rozpowszechniony algorytm szyfrowania (np. AES, blowfish)?
 

Fuv

Użytkownik
Dołączył
Luty 28, 2009
Posty
16
Czy np. program do szyfrowania/deszyfrowania w C++ wykorzystujący szyfr Cezara może być? Mam taki na kompie chyba jeszcze więc mogę podesłać
 

bandito88

Użytkownik
Dołączył
Sierpień 8, 2007
Posty
114
Nawet algorytm Cezara. Chodzi o to żeby wpisany tekst jawny był zaszyfrowany a po ponownym jego wpisaniu został odszyfrowany. Chodzi oczywiście o C++. Jeśli chodzi o algorytm to ma być dowolny(XOR, Przesunięcie, ROT-13 itp.). Najlepiej bez używania zewnętrznych źródeł.
smile.gif
 

Vexiorus

Użytkownik
Dołączył
Kwiecień 25, 2009
Posty
51
Ja mogl bym ci polecic cos w tym stylu:

Najpierw wyswietlenie listy znakow i ich odpowidnikwo
<

Kod:
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
for (int i = 0; i < 256; i += 4)
{
std::cout << "| " << (char) (i) << " == " << i << " | ";
std::cout << (char) (i + 1) << " == " << i + 1 << " | ";
std::cout << (char) (i + 2) << " == " << i + 2 << " | ";
std::cout << (char) (i + 3) << " == " << i + 3 << " | ";
std::cout << std::endl;
}
getch();
}

Program do szyfrowania
Kod:
#include <iostream>
#include <conio.h>

using namespace std;
int main()
{
    cout << "Wpisz ciag wyrazow oddzielony znakiem '_' :" << endl;
    while (1 >= 1)
    {
    char liczba;
    cout << "";
    cin >> liczba;
    cout << (int) (liczba) << endl;
    
}
    getch();
}

Program do deszyfrowania
Kod:
#include <iostream>
#include <conio.h>

using namespace std;
int main()
{
    cout << "Wpisz ciag liczb oddzielonych spacjami:" << endl;
    while (1 >= 1)
    {
    int liczba;
    cout << "";
    cin >> liczba;
    cout << (char) (liczba) << endl;
    
}
    getch();
}

Kod mozesz zmienic na wlasne potrzeby
<

Mam nadzieje ze pomoglem
<
 

tobix10

Użytkownik
Dołączył
Luty 25, 2009
Posty
65
Cezar
Kod:
#include <string>
std::string CeasarCode(std::string s)
{
    /* przesunięcie o 3 litery dalej */

    for(int i = 0; i < s.length(); ++i)
    {
        s[i] = toupper(s[i]);
        if((s[i] >= 'A') && (s[i] <= 'Z'))
          s[i] = (s[i] - 62) % 26 + 65;        //jest 26 liter w alfabecie
    }
    
    return s;
}

std::string CeasarDecode(std::string s)
{
    for(int i = 0; i < s.length(); ++i)
    {
        s[i] = toupper(s[i]);
        if((s[i] >= 'A') && (s[i] <= 'Z'))
         s[i] = (s[i] - 42) % 26 + 65;        //jest 26 liter w alfabecie
    }
    return s;
}
XOR
Kod:
std::string XorCode(const std::string & strText, const std::string & strPass)
{
    std::string r;

    for(size_t i = 0; i < strText.length(); ++i)
    {
        r += strText[i] ^ strPass[i % strPass.size()];
    }
    return r;
}
std::string XorDecode(const std::string & strEText, const std::string & strPass)                  //trzeba podac takie same haslo zeby odkodowac
{
    return XorCode(strEText, strPass);
}
ROT13
Kod:
std::string Rot13Code(std::string s)
{
    /* przesunięcie o 13 liter dalej */

    for(int i = 0; i < s.length(); ++i)
    {
        if((s[i] >= 'A') && (s[i] <= 'Z'))
             s[i] = (s[i] + 13 - 'A') % 26 + 'A';
        else if((s[i] >= 'a') && (s[i] <= 'z'))
             s[i] = (s[i] + 13 - 'a') % 26 + 'a';
    }
    
    return s;
}
std::string Rot13Decode(std::string & strEText)
{
     return Rot13Code(strEText);
}
AtBash
Kod:
std::string AtBashCode(std::string s)
{
    /* zamiana litery leżącej w odległości X od początku alfabetu na literę leżącą w odległości X od jego końca */

    for(int i = 0; i < s.length(); ++i)
    {
        if((s[i] >= 'A') && (s[i] <= 'Z'))
             s[i] = ('Z' - (s[i] - 'A'));
        else if((s[i] >= 'a') && (s[i] <= 'z'))
             s[i] = ('z' - (s[i] - 'a'));
    }

    return s;
}
        
std::string AtBashDecode(std::string & strEText)
{
    return AtBashCode(strEText);
}

Masz te proste
<
. Mam nadzieję, że nie pomyliłem się przy kopiowaniu. To są funkcję z mojego programu, który ma graficzne gui w fltk, więc raczej tego nie chcesz, bo o ile się nie mylę potrzebujesz konsolówkę.
 
Do góry Bottom