theCodingCat Ответов: 1

Мой алгоритм шифра Виженера является оптимальным ?


Недавно я написал алгоритм, который шифрует одно слово в другое с помощью шифра вигенера, и я хочу знать, является ли он оптимальным.
Вот он код
#include <iostream>
#include <string>
#include <vector>

using namespace std;

char encodeur( char premiereLettre, char deuxiemeLettre)
{

    int premiereChiffreLettre;
    int deuxiemeChiffreLettre;

    int lettreFiniChiffre;
    char lettreFini;

    int difference;

    premiereChiffreLettre = int(premiereLettre);
    deuxiemeChiffreLettre = int(deuxiemeLettre);

    lettreFiniChiffre = premiereChiffreLettre  + (deuxiemeChiffreLettre - 97);

    if (lettreFiniChiffre > 122)
    {
        difference = lettreFiniChiffre - 123;
        lettreFiniChiffre = 97 + difference;
    }
    else
    {

    }
    lettreFini = char(lettreFiniChiffre);
    return lettreFini;
}

string encodeurMot(string mot, string motEncodeur)
{
    int taille = mot.size();
    int tailleMotEncodant = motEncodeur.size();

    string motEncoder;

    char lettre;
    char lettreEncodant;
    char lettreEncoder;

    vector<char> tableau(taille);
    for(int i = 0, j = 0; i < taille;j++, i++)
    {
        if (j == tailleMotEncodant)
        {
            j = 0;
        }
        else
        {

        }
        lettre = mot[i];
        lettreEncodant = motEncodeur[j];
        lettreEncoder = encodeur(lettre , lettreEncodant);

        tableau[i] = lettreEncoder;
        motEncoder += tableau[i];
    }
    return motEncoder;
}
int main()
{
    string mot;
    string motEncodeur;
    string motEncoder;

    int onOff(1);
    while (onOff == 1)
    {
    cout << "what's the word you want to encrypt ?" << endl;
    cin >> mot;
    cout << "Thank you, now what's the word do you want to use for encryption ?" << endl;
    cin >> motEncodeur;

    motEncoder = encodeurMot(mot, motEncodeur);

    cout << motEncoder << endl;
    cout << "do you want to encrypt another word ?(0 for no, 1 for yes)" << endl;
    cin >> onOff;
    }
    return 0;
}

извините за имена переменных, я француз.

Что я уже пробовал:

я постарался сделать его максимально оптимальным.

1 Ответов

Рейтинг:
6

Patrice T

Цитата:
извините за имена переменных, я француз.
C'est pas un problème.
Цитата:
я хочу знать, насколько это оптимально.
Нет, это не так.
В encodeur вам не нужно трансформироваться char к int, вы можете использовать char непосредственно.
char encodeur( char premiereLettre, char deuxiemeLettre)
{

    int premiereChiffreLettre;
    int deuxiemeChiffreLettre;

    int lettreFiniChiffre;
    char lettreFini;

    int difference;
    char difference;

    premiereChiffreLettre = int(premiereLettre);
    deuxiemeChiffreLettre = int(deuxiemeLettre);

    lettreFiniChiffre = premiereChiffreLettre  + (deuxiemeChiffreLettre - 97);

    if (lettreFiniChiffre > 122)
    {
        difference = lettreFiniChiffre - 123;
        lettreFiniChiffre = 97 + difference;
    }
    else
    {

    }
    lettreFini = char(lettreFiniChiffre);
    return lettreFini;
}

или
char encodeur( char premiereLettre, char deuxiemeLettre)
{
    unsigned char lettreFini;
    unsigned char difference;

    lettreFini = premiereLettre  + (deuxiemeLettre - 97);

    if (lettreFini > 122)
    {
        difference = lettreFini - 123;
        lettreFini = 97 + difference;
    }
    return lettreFini;
}

Voilà pour quelques simplifications.
Tu peux aussi éliminer tableau

Chiffre de Vigenère — Wikipédia[^]


Richard MacCutchan

Хорошо сделано, теперь никто не может понять ответ.

Patrice T

Исправил некоторые опечатки.
Я знаю, что многое нужно убрать из этой функции.
Кстати, спасибо за комментарий с новичку.

Richard MacCutchan

Да, но она все еще на французском. Это англоязычный сайт.

Patrice T

Я сохранил основную часть на английском языке. Части во французском языке не меняют значения, они вторичны.
Обратите внимание, что я исправил несколько опечаток, которые могут помочь, если вы хотите перевести.

theCodingCat

На самом деле я пробовал ваше решение, но код не работает.

Patrice T

J'AI mis à jour ma réponse.
Est-ce que ton код соответствует ?
Quelle erreur a tu ?

theCodingCat

mon code correspond à ce que tu as fait mais par exemple si je tente d'Encoder un u avec un u cela me donne un é alors que mon programme est conçu pour éviter cela

Patrice T

Essaye de remplacer char par unsigned char

theCodingCat

Je te remercie beaucoup, cela marche.