私は現在、単純な小さなワンタイムパッドプログラムを書いています。keyfile
がファイルより小さい場合にユーザーに警告したいのですsource
が、実行すると、プログラムはそれを単に無視します。
/* Check if keyfile is the same size as, or bigger than the sourcefile */
if(sizeof keyfile < sizeof sourcefile)
{
printf("Source file is larger than keyfile.\n");
printf("This significantly reduces cryptographic strength.\n");
printf("Do you wish to continue? (Y/N)\n");
scanf("%c", &ans);
if(ans == 'n' || ans == 'N')
{
return (1);
}
if(ans == 'y' || ans == 'Y')
{
printf("Proceeding with Encryption/Decryption.\n");
}
問題は私の使い方sizeof
にあると思いますが、他のオプションについてはわかりませんか? コードを変更して機能させる方法について何か提案はありますか?
編集:私はfstat
自分の能力を最大限に発揮しようとしましたが、それでも同じように反応します...これが私がしたことです:
/* Get size of sourcefile. */
if((sourcefile = fopen(argv[1], "rb"))== NULL)
{
printf("Can't open source file.\n");
printf("Please enter a valid filename.\n");
printf("USAGE: OTP <source file> <output file> <keyfile>\n");
return (1);
}
fflush(sourcefile);
fstat(fileno(sourcefile), &statbuf);
fclose(sourcefile);
/* Get size of keyfile. */
if((keyfile = fopen(argv[3], "rb"))== NULL)
{
printf("Can't open keyfile.\n");
printf("Please enter a valid filename.\n");
printf("USAGE: OTP <source file> <output file> <keyfile>\n");
return(1);
fflush(keyfile);
fstat(fileno(keyfile), &keybuf);
fclose(keyfile);
}
if ステートメントの最初の行が無視されるように変更しました。
if((keybuf.st_size) < (statbuf.st_size))
プログラムによってまだ無視されているのはなぜですか?