我的vigenere cypher算法是否是最佳的? [英] Does my vigenere cypher algorithm is optimal ?

查看:78
本文介绍了我的vigenere cypher算法是否是最佳的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近,我编写了一个算法,用vigenere cypher将一个单词加密到另一个单词,我想知道它是否是最优的。

这里是代码

< pre lang =c ++> #include < < span class =code-leadattribute> iostream >
#include < string >
#include < vector >

使用 命名空间标准;

char encodeur( char premiereLettre, char deuxiemeLettre)
{

int premiereChiffreLettre;
int deuxiemeChiffreLettre;

int lettreFiniChiffre;
char lettreFini;

int 的区别;

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

lettreFiniChiffre = premiereChiffreLettre +(deuxiemeChiffreLettre - 97 );

if (lettreFiniChiffre> 122
{
差异= lettreFiniChiffre - 123 ;
lettreFiniChiffre = 97 +差异;
}
else
{

}
lettreFini = (lettreFiniChiffre);
return lettreFini;
}

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

string motEncoder;

char lettre;
char lettreEncodant;
char lettreEncoder;

vector< char>画面(taille);
for int i = 0 ,j = 0 ; i< taille; j ++,i ++)
{
if (j == tailleMotEncodant)
{
j = 0 ;
}
其他
{

}
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< ;< 您要加密的单词是什么?<< ENDL;
cin>> MOT;
cout<< 谢谢,现在你要用什么词进行加密?<< ENDL;
cin>> motEncodeur;

motEncoder = encodeurMot(mot,motEncodeur);

cout<< motEncoder<< ENDL;
cout<< 你想加密另一个单词吗?(0表示否,1表示是)<< ; ENDL;
cin>>开关;
}
return 0 ;
}



抱歉变量的名字,我是法国人。



我尝试了什么:



i试图让它尽可能最佳。

解决方案

< blockquote>

引用:

抱歉变量的名字,我是法国人。

C'est pasunproprolème。

Quote:

我想知道它是否是最佳的。

非它不是。

在encodeur中,您不需要将 char 转换为 int ,您可以使用 char 直接。

  char  encodeur( char  premiereLettre, char  deuxiemeLettre)
{

int premiereChiffreLettre;
int deuxiemeChiffr eLettre;

int lettreFiniChiffre;
char lettreFini;

int 差异;
char 差异;

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

lettreFini Chiffre =首映 Chiffre Lettre +(deuxieme Chiffre Lettre - 97 );

如果(lettreFini Chiffre > 122
{
差异= lettreFini Chiffre - 123 ;
lettreFini Chiffre = 97 +差异;
}
else
{

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





  char  encodeur( char  premiereLettre, char  deuxiemeLettre)
{
unsigned char lettreFini;
unsigned char 的区别;

lettreFini = premiereLettre +(deuxiemeLettre - 97 );

if (lettreFini> 122
{
差= lettreFini - 123 ;
lettreFini = 97 +差异;
}
return lettreFini;
}


$ b $bVoilàpourquelques简化。

Tu peuxaussiéliminer tableau



ChiffredeVigenère - Wikipédia [ ^ ]


Recently, i wrote an algorithm who encrypt an word into another one with the vigenere cypher and i want to know if it's optimal.
Here it's the code

#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;
}


sorry for the variables's names, i'm french.

What I have tried:

i have tried to make it as optimal as possible.

解决方案

Quote:

sorry for the variables's names, i'm french.

C'est pas un problème.

Quote:

i want to know if it's optimal.

Non it is not.
In encodeur, you don't need to transform char to int, you can use char directly.

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;
}


or

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[^]


这篇关于我的vigenere cypher算法是否是最佳的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆