我认为这个c ++代码应该用于加密仿射密码。但输出显示奇怪的字符而不是正常的字母。我不明白为什么。
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<cstring>
#include<conio.h>
using namespace std;
int main()
{
cout << "Enter string: ";
char whatever[20];
gets (whatever);
char something [20];
int a;
int b = 8;
int m = 26;
int coprimetest;
for (a=2;coprimetest!=1;a++)
{
for (int i=1;i<=a&&i<=m;i++)
{
if (a%i==0 && m%i ==0) coprimetest=i;
}
}
for (int i = 0; i < sizeof(whatever); i++)
something [i]= (char)((((a * whatever[i]-65) + b) % m)+65);
for (int i=0; i < sizeof(something); i++)
cout << something[i];
}
答案 0 :(得分:0)
在将变量coprimetest初始化为0并运行几次之后,我注意到我使用std::cin >> whatever;
输入控制台的字符串长度我得到了该字符串中所有字符的更改字符第一个白色空间角色。因此,如果我输入"Hello"
,我会从for循环中获取"XJLLX<<<<<<<<<<<<<<<"
作为输出到控制台。现在,如果我尝试"Hello World"
,我会获得相同的输出。如果我尝试"HelloWorld"
,我的输出现在是"XJLLXFXJLF<<<<<<<<<<"
。值"1234567890"
为我提供"JNRVZDHLPF<<<<<<<<<<"
。值"abcdefghijklmnopqrst"
给出"TXBFJNRVZDHLPTXBFJNF"
。值"uvwxyzABCDEFGHIJKLM"
给出"VZDHLPVZDHLPTXBFJNRV"
。在字符串中输入正好20个字符的唯一方法是它确实打印成功,但在我的下一行代码之后,它向"Press Any Key To Quit"
发送了另一条消息,该消息来自我的一个实用程序函数;程序确实崩溃,给出了一条错误消息:Run-Time Failure #2 - Stack around the variable "whatever" was corrupted.
,因为它来自MSVS2015 CE。只是需要注意的事情。