簡體   English   中英

C-消息摘要,每次返回相同的值(4個文件中的1個應具有不同的值)

[英]C - Message digest, same value returning every time (1 of 4 files should have a different value)

我的一個文件應該不同於其他文件,並且該程序應該告訴我哪個文件。 我有一種感覺,“ _ setmode ...”可能是錯誤的(實際上幾乎可以肯定,它似乎沒有任何作用-應該在程序開始時將輸入模式設置為二進制)。 為了進行測試,我將在每次使用后重置程序並重命名文本文件,以便使用相同的名稱對它們進行測試。 我使用C:/Users/User/Desktop/file.txt作為我的DOS命令。

#include <stdio.h>
#include <fcntl.h>
#include <io.h>

int main(void){
    int s1=0, s2=0, s3=0, s4=0;
    int m1=3, m2=7, m3=13, m4=23;
    int B;
    _setmode(_fileno(stdin), _O_BINARY);

while((B=getchar()) != EOF)
{

   s1 = (s1 + B*m1) % 256;
   s2 = (s1+s2 + B*m2) % 256;
   s3 = (s1+s2+s3 + B*m3) % 256;
   s4 = (s1+s2+s3+s4 + B*m4) % 256;
   B = getchar();
   printf("%02x%02x%02x%02x\n", s1, s2, s3, s4 );
}
return 0;
}

我正在使用的文件(帶有粘貼到文件的astebin鏈接的astebin,因為我需要更多代表才能發布兩個以上鏈接):

檔案連結: http : //pastebin.com/wLF9NRNu

我還剛剛發現,我顯然只應該檢查中點值,所以得到了以下命令,這對我來說似乎或多或少地沒有用:

C:\\> mdPoint <file.txt

同樣,在玩了一些之后,似乎我的命令根本沒有打開文件,只是根據我輸入的命令文本給我輸出。 不知道這是怎么回事。

不是答案,而是太多評論。 我在三個文件上測試了您的程序。 第一個文件test1.txt包含文本“一個”。

yourprogram < test1.txt
4d5646e2
7c95787e

相同的文件test11.txt具有相同的內容“一個”和相同的結果。

yourprogram < test11.txt
4d5646e2
7c95787e

下一個文件test2.txt包含文本“兩個”。

yourprogram < test2.txt
5c88c818
a93a4e42

因此,您對結果“基於命令文本”的評論是不正確的,它可以處理內容。 也許您需要一個更好的思考和提出的問題。 而且您的pastebin不包含任何易於訪問的內容。

您的代碼中有一些錯誤。 我相信你的意思是:

#include <stdio.h>
#include <fcntl.h>
#include <io.h>

int main(void){
    int s1=0, s2=0, s3=0, s4=0;
    int m1=3, m2=7, m3=13, m4=23;
    int B;
    _setmode(_fileno(stdin), _O_BINARY);

    while((B=getchar()) != EOF)
    {

       s1 = (s1 + B*m1) % 256;
       s2 = (s1+s2 + B*m2) % 256;
       s3 = (s1+s2+s3 + B*m3) % 256;
       s4 = (s1+s2+s3+s4 + B*m4) % 256;

    }
    printf("%02x%02x%02x%02x\n", s1, s2, s3, s4 );
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM