MD5密碼編譯演算法簡單樣本,md5密碼編譯演算法

來源:互聯網
上載者:User

MD5密碼編譯演算法簡單樣本,md5密碼編譯演算法
MD5密碼編譯演算法簡單樣本        現在網路上一般的網站,只要功能稍微完善一點的,都需要使用者進行註冊,提供諸如使用者名稱、使用者密碼、電子郵件、甚至是電話號碼、詳細住址等個人隱私資訊,然後才可以享受網站提供的一些特殊的資訊或者服務。為了增加安全性,有必要對資料庫中的隱私資料進行加密。
        MD5演算法,即“Message-Digest Algorithm 5(資訊-摘要演算法)”,它是由MD2、MD3、MD4 發展而來的一種單向密碼編譯演算法,也就是雜湊(HASH)演算法,是由國際著名的公開金鑰加密演算法標準RSA的第一設計者R.Rivest於上個世紀90 年代初開發出來的。現在,MD5已經被廣泛的應用到項目實踐中。
        密碼編譯演算法一般有兩種,即單向密碼編譯演算法和雙向密碼編譯演算法。雙向加密是密碼編譯演算法中最常用的,它將可以直接理解的明文資料加密為不可直接理解的密文資料,在需要的時候,又可以使用一定的演算法將這些加密以後的密文資料解密為原來的明文資料。單向加密則剛好相反,它只能對明文資料進行加密,而不能對加密了的密文資料再解密成原來的明文資料。
        MD5演算法就是單向加密的密碼編譯演算法。它有兩個很重要的特性,第一是任意兩段明文資料,加密以後的密文資料一定是不相同的;第二是任意一段明文資料,經過加密以後,其密文資料永遠是相同的。
        建立一個控制台應用程式。用於加密文本smallville。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Security.Cryptography;namespace MD5Test{    class Program    {        // 使用MD5加密字串的方法        public static string GetMd5Str(string myString)        {            MD5 md5 = new MD5CryptoServiceProvider();            // 擷取字串對應的字元數組            byte[] fromData = System.Text.Encoding.Unicode.GetBytes(myString);            // 擷取雜湊字串數組            byte[] toData = md5.ComputeHash(fromData);            string byteStr = null;            for (int i = 0; i < toData.Length; i++)            {                // 將字元數組串連還原成字串,以十六進位的方式表示,不帶前置"0x"                byteStr += toData[i].ToString("x");            }            return byteStr;        }        static void Main(string[] args)        {            string md5Str = "smallville";            string md5NewStr = GetMd5Str(md5Str);            Console.WriteLine(md5NewStr);            Console.ReadLine();        }    }}
        PS:需要引用System.Security.Cryptography命名空間。        輸出結果為:

急 MD5的加密解密演算法,用C++實現的原始碼 高分答謝

要代碼,還是要相關的解釋資料?

---------------------------------
要代碼的話:

兩個檔案:
--------------------------
1. md5.h:

#pragma once

typedef unsigned long int UINT32;
typedef unsigned short int UINT16;

/* MD5 context. */
typedef struct {
UINT32 state[4]; /* state (ABCD) */
UINT32 count[2]; /* number of bits, modulo 2^64 (lsb first) */
unsigned char buffer[64]; /* input buffer */
} MD5_CTX;

void MD5Init (MD5_CTX *);
void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
void MD5Final (unsigned char [16], MD5_CTX *);

--------------------------
2. md5.cpp:

#include "md5.h"

#include "memory.h"

#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21

static void MD5Transform (UINT32 a[4], unsigned char b[64]);
static void Encode (unsigned char *, UINT32 *, unsigned int);
static void Decode (UINT32 *, unsigned char *, unsigned int);

static unsigned char PADDING[64] = {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ ......餘下全文>>
 
MD5演算法怎解密

介紹MD5密碼編譯演算法基本情況MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的電腦科學實驗室和RSA Data Security Inc發明,經MD2、MD3和MD4發展而來。
Message-Digest泛指位元組串(Message)的Hash變換,就是把一個任意長度的位元組串變換成一定長的大整數。請注意我使用了"位元組串"而不是"字串"這個詞,是因為這種變換隻與位元組的值有關,與字元集或編碼方式無關。

MD5將任意長度的"位元組串"變換成一個128bit的大整數,並且它是一個無法復原的字串變換演算法,換句話說就是,即使你看到來源程式和演算法描述,也無法將一個MD5的值變換回原始的字串,從數學原理上說,是因為原始的字串有無窮多個,這有點象不存在反函數的數學函數。

MD5的典型應用是對一段Message(位元組串)產生fingerprint(指紋),以防止被"篡改"。舉個例子,你將一段話寫在一個叫readme.txt檔案中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個檔案給別人,別人如果修改了檔案中的任何內容,你對這個檔案重新計算MD5時就會發現。如果再有一個第三方的認證機構,用MD5還可以防止檔案作者的"抵賴",這就是所謂的數位簽章應用。

MD5還廣泛用於加密和解密技術上,在很多作業系統中,使用者的密碼是以MD5值(或類似的其它演算法)的方式儲存的,使用者Login的時候,系統是把使用者輸入的密碼計算成MD5值,然後再去和系統中儲存的MD5值進行比較,而系統並不"知道"使用者的密碼是什麼。

一些駭客破獲這種密碼的方法是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字串表,另一種是用排列組合方法產生的,先用MD5程式計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。

即使假設密碼的最大長度為8,同時密碼只能是字母和數字,共26+26+10=62個字元,排列組合出的字典的項數則是P(62,1)+P(62,2)....+P(62,8),那也已經是一個很天文的數字了,儲存這個字典就需要TB級的磁碟組,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。

在很多電子商務和社區應用中,系統管理使用者的Account是一種最常用的準系統,儘管很多Application Server提供了這些基本組件,但很多應用開發人員為了管理的更大的靈活性還是喜歡採用關聯式資料庫來系統管理使用者,懶惰的做法是使用者的密碼往往使用明文或簡單的變換後直接儲存在資料庫中,因此這些使用者的密碼對軟體開發人員或系統管理員來說可以說毫無保密可言,本文的目的是介紹MD5的Java Bean的實現,同時給出用MD5來處理使用者的Account密碼的例子,這種方法使得管理員和程式設計者都無法看到使用者的密碼,儘管他們可以初始化它們。但重要的一點是對於使用者密碼設定習慣的保護
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.