我正在嘗試在OTP(一次性時間片)加密上創建一個C程序。該程序需要一個字符串從用戶加密。然後它必須在獲取密鑰之前詢問密鑰的長度(整數)。由於我希望程序100%正確,所以我對密鑰的長度進行了限制。正如我們所知,在OTP中,密鑰的長度必須是整數,不能超過文本的長度。那麼,我們如何才能實現這樣一個過濾器?我試着創建代碼,但它不工作。如何限制用戶在C中輸入大於指定長度的字符和整數?
下面的代碼:
//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個」值不應該超過字符串的長度加密,並重申循環,如果這些條件不滿意。有人能指出我的錯誤並顯示解決方案嗎?另外,請解釋爲什麼代碼不能正常工作。
當然,你的意思是關鍵必須是不短於文本?否則,你不得不重複密鑰,這會使加密變得脆弱。 –
@Arlene請解釋您遇到的具體問題。 – 2013-04-13 11:55:56
@NicholasWilson: - 理想情況下,要使密碼100%無法破解,密鑰應該與文本一樣長。由於這在所有情況下都是不可能的,因此密鑰應儘可能長,但在「否」情況下可能會超過要加密的文本的長度。 –