如何用C語言實現MD5演算法計算乙個文字的訊息摘要

2025-03-10 21:25:15 字數 3317 閱讀 3749

1樓:匿名使用者

md5是不可能逆向的。

王教授的碰撞法是利用了md5或者sha1演算法的乙個特性,根據md5和sha1等hash演算法的特點,因為他們是任意長度的字串變成固定長度的摘要資訊。

那麼這裡就有可能發生乙個問題,就是不同的字串在理論上是有可能產生相同的摘要資訊。

王教授所謂的碰撞法,碰撞的就是不同的字串所產生的摘要資訊是一樣的那些字串。因此得名碰撞法。 碰撞就是體現在這裡。

沒有什麼其它的傳神的東西了。根據sha1和md5等hash演算法,在設計時候,設計這個演算法的人認為不同的字串要產生相同結果的摘要資訊的可能性幾乎為零。而王教授則證明了sha1和md5等hash演算法產生的摘要資訊規則是可以在比較短時間內被破解的。

這樣一來,原始資料的 integrity 就被打破了。 所謂的破解,也就是體現在這裡。

至於破解工具,下面的位址提供一些免費的破解服務,能破解一些簡單的密碼,其實都是採用字典或暴力破解。

我有時去破解一些常用的密碼,有一定的成功率。

如何對字串進行md5加密,用c語言實現,給出源**和加密函式

2樓:最後派對°鱧欲

/*四個32bits數,用於存放最終計算得到的訊息摘要。當訊息長度》512bits時,也用於存放每個512bits的中間結果*/

uint4 state[4];

儲存原始資訊的bits數長度,不包括填充的bits,最長為2^64 bits*/

uint4 count[2];

存放輸入的資訊的緩衝區,512bits*/

unsigned char buffer[64];}md5_ctx;static void md5transform(uint4[4], unsigned char[64]);

static void encode(unsigned char *,uint4 *,unsigned int);

static void decode(uint4 *,unsigned char *,unsigned int);/*用於bits填充的緩衝區,當欲加密的資訊的bits數被512除其餘數為448時,需要填充的bits的最大值為512=64*8*/

static unsigned char padding[64] = ;/*接下來的這幾個巨集定義是md5演算法規定的,就是對資訊進行md5加密都要做的運算*/

#define f(x, y, z) (x) &y)) x) &z)))

#define g(x, y, z) (x) &z)) y) &z)))

#define h(x, y, z) (x) ^y) ^z))

#define i(x, y, z) (y) ^x) |z)))

#define rotate_left(x, n) (x) 32-(n)))

#define ff(a, b, c, d, x, s, ac) #define gg(a, b, c, d, x, s, ac) #define hh(a, b, c, d, x, s, ac) #define ii(a, b, c, d, x, s, ac) {

a) += i ((b), c), d)) x) +uint4)(ac);\

如何在乙個文字檔案裡面填入這個文字檔案的md5值?

3樓:網友

看看是不是這樣的情況。

如果你把乙個文字檔案計算md5值後把值寫入文字檔案,再算md5,那後來算出來的肯定和原來寫入文字檔案的值不一樣,要讓它相同,正如一樓所說,那是不可能的,任何人都不行。

我覺得你看到的應該是這樣吧,乙個文字檔案(比如一篇文章),後面寫有md5值,用來驗證檔案是否被修改,你要驗證時,必須刪除那個md5值(別的地方一點都不能動喲),把它剪下到別處,再來算文字檔案的值,看是否相同,看是否被改過,保證檔案的真實性。要是這樣,也太簡單了吧,就是先算md5(算md5前注意在文字檔案中留下乙個位置,保證刪除後對原文一點影響都沒有,包括增減空格等),現在開啟檔案,再把算出的值複製到那個位置就行了。

如果用程式實現,就先算md5,儲存在變數中,再用寫入流加到最後,驗證時,複製出md5值後再刪除md5值,再進行計算比較。

用程式做肯定比人工好,因為,人做容易對檔案進行多餘的修改,造成驗證失敗。

4樓:網友

不可能,寫入md5值之後,其md5值就會改變。。。然後無限迴圈。。

如果你是要乙個文字的最後某固定長度雜湊值就是md5值,這概率太小了。。

5樓:匿名使用者

這個好像不行吧。文字檔案裡隨便寫點東西都會改變其md5值。

6樓:換下一話題

mitticro是對的。。。

不過一些皆有可能啊,尤其蛋疼的人多的很。曾看過乙個在mspaint裡畫圖,用notepad開啟不是亂碼的gif圖。

如何獲取乙個檔案的md5值 c

7樓:也愛他人

linux下查詢檔案的md5值:md5sum md5演算法常常被用來驗證網路檔案傳輸的完整性,防止檔案被人篡改。md5全稱是報文摘要演算法(message-digest algorithm 5),此演算法對任意長度的資訊逐位進行計算,產生乙個二進位長度為128位。

用c語言設計乙個簡單地加密算,解密演算法,並說明其中的原理

8樓:網友

題目描述:插入式加密法是資訊加密中一種簡單的加密技術,其方法是在明文字元中插入一些無意義的字母來形成密文單詞。例如,對於明文:

china,在間隔為1的位置依次插入乙個字母而形成密文:coheifnia。因此,其解密過程與加密過程相反,即從密文中首字清團符開始取,每間隔1個位置依次取出字元,就得到原始的明文。

請程式設計實現插入式加密法所對應的解密演算法,將密文翻譯成明文。

提示:定義兩個字元陣列ci和pl,分別存放密文字串和明文字串。解密過程即在字串ci中,從下標0的字元(首字元)開始,將偶數下標的字元(』\0』之前的)依次取出賦值到字元陣列pl中,最後即得到明文字串。

輸入描述:帆蘆輸入一行:密文字串。

輸出描述:輸出有一答轎橘行:翻譯後的明文字串。

樣例輸入:coheifnia

樣例輸出:china

答案:#include

using namespace std;

int main( )

char ci[81],pl[81];

int j,k;

cin>>ci;

for(j=k=0;ci[j]!=0';j++)if(j%2==0)

pl[k]=ci[j];

k++;pl[k]='0';

cout

用c語言實現檔案拷貝,用C語言實現檔案拷貝

include int main int argc,char argv argc表示命令引數個數,argv表示引數名稱 fpdest fopen argv 2 wb 以寫入二進位制的方式開啟目標檔案 if fpdest null while c fgetc fpsrc eof fclose fpsr...

c語言實現位元組的高低位轉化,c語言實現2個位元組的高低位轉化

1 有除法,效率最低。rol指令,這個效率最高。位操作效率比除法高,效率比1高.2 例程 include define mask 0x00ff void main 2個位元組short int高低位轉化 short inty 0x7f21 y y 0xff00 8 y 0x00ff 8 printf...

c語言實型常量,C語言,實型常量???

酷哥 嚴格來說,c語言中沒有 實型 real type 這種資料型別。c語言中非構造型別只有整型 int short long long long和對應的unsigned修飾的型別,以及同義寫法 以及浮點型 包括單精度浮點型float,雙精度浮點型double,長雙精度浮點型long double ...