我正在尝试创建一个关于 OTP(One Time Pad)加密的 C 程序。该程序从用户那里获取一个要加密的字符串。然后它必须在获取密钥之前询问密钥的长度(整数)。由于我希望程序 100% 正确,因此我对密钥的长度进行了限制。我们知道,在 OTP 中,密钥的长度必须是整数,不能超过文本的长度。那么,我们如何实现这样的过滤器呢?我已经尝试创建代码,但它不工作。
这是代码:
//An Under-Construction program to implement OTP (One time Pad) encryption
#include "stdio.h"
#include "cstring"
#include "ctype.h"
int main()
{
char str[10000], key[10000];
printf("Enter the string:- ");
scanf("%[^\n]", str); //stops scanning when user presses return
int len /* stores the number of digits of the OTP key*/, isalphabet=0;
do
{
printf("What is the length of the key you are entering?:-");
scanf("%d", &len);
if( isalpha(len) ) // Checks if len is a character
{
isalphabet=NULL; //isalphabet becomes NULL if it is a character and not an integer
}
} while (len > strlen(str) || isalphabet == NULL); //reiterate the loop until the conditions are satisfied
for(int i = 0; i < len; i++)
{
printf("%dth digit of Key= ", i+1);
scanf("%d", &key[i]);
}
return(0);
}
我希望程序在扫描“len”时仅从用户那里获取整数值,并且“len”的值不应超过要加密的字符串的长度,如果不满足这些条件,请重复循环。有人可以指出我的错误并展示解决方案吗?另外,请向我解释为什么代码不能正常工作的原因。