我的作业是使用仿射密码对用户输入的文本进行基本编码。
仿射密码基本上采用a和b关键字以及用于编码的文本,然后使用此公式 y = A * x + B mod 26 为每个文本字母对其进行编码。 X =信件, Y =编码信件。 mod26适用于26个字母
我的作业是使用仿射密码对用户输入的文本进行基本编码。
这是我的代码。
#include <iostream>
#include <string.h>
using namespace std;
string encryption(string message,int a, int b)
{
string encryptedMessage= "";
for (int x = 0; x < message.length(); x++)
{
encryptedMessage = encryptedMessage + (char) ((((a * message[x]) + b) % 26) + 65);
}
return encryptedMessage;
}
int main()
{
int a,b;
cout<<"Enter keyword a."<<endl;
cin>>a;
cout<<"Enter keyword b."<<endl;
cin>>b;
string text;
cout<<"Enter the text you want to encrypt"<<endl;
cin>>text;
cout<<encryption(text,a,b);
}
注意:请原谅我的英语和语法错误。
但是这个程序使用ASCII字符及其英文字母但我需要使用土耳其字母,但由于我不能使用ASCII,因此我用数组创建了自己的字母。
char alphabet[29]={'A','B','C','Ç','D','E','F','G','Ğ','H','I','İ','J','K','L','M','N','O','P','R','S','Ş','T','U','Ü','V','Y','Z'};
我的问题基本上是如何将这个字母表实现为我的字符串加密(字符串消息,int a,int b)函数?我试图使用for循环来处理一些蹩脚的算法,例如:后者在消息中(由用户输入)如果等于char字母数组的字母选择它们然后在一个名为 Word 的数组中创建Word但我认为它太蹩脚了因为我也必须将该数组抛入加密功能然后用很多for循环对它进行加密。那么你能帮助我吗?
注意:抱歉我的语法错误。
答案 0 :(得分:0)
使用此字母表,加密方法应为:
char alphabet[29]={'A','B','C','Ç','D','E','F','G','Ğ','H','I','İ','J','K','L','M','N','O','P','R','S','Ş','T','U','Ü','V','Y','Z'};
//This encriptation is using only the fisrt 26 characters
string encryption(string message,int a, int b)
{
string encryptedMessage= "";
for (unsigned x = 0; x < message.length(); x++)
{
encryptedMessage = encryptedMessage + alphabet[(((a * (message[x]-64)) + b) % 29)];
}
return encryptedMessage;
}
说明:(((a * (message[x]-64)) + b) % 29)
这从0到28。
alphabet[(((a * (message[x]-64)) + b) % 29)]
这会访问char[]
编辑:我还将64
('A'
的ASCII)减去message[x]
,以便将'A'
映射到数组的init ,但它应仅用于ASCII greter而不是64
Edit2 :如果您不想要此限制,则可以添加一个数字,而不是减去,例如,如果您添加0
或28
{{1 } {}给你BBB
(HHH
的ascii是B
,66
,然后66*1+1= 67
然后是67%29=9
),但你想要{{} 1}},alphabet[9]=H
,"ÇÇÇ"
和alphabet[3]=Ç
,所以9-3=6
是您的神奇数字。
28-6=22
使用Wandbox
中的22
的实例