You are on page 1of 3

Ly m MD5 trong C# Gii thiu v MD5 MD5 (Message-Digest Algorithm 5) l mt thut ton m ho, theo chun RFC 1321

(http://tools.ietf.org/html/rfc1321). Cc chng trnh m ho (tnh) MD5 thng c gi l MD5 CheckSum. N c dng to ra mt chui 128 bit duy nht t mt chui d liu nhp bt k, v v th thng c dng kim tra tnh ton vn d liu ca mt tp tin. Ni mt cch n gin, nu tp tin bn ti v c m MD5 (thng c biu din bng 32 k t thp lc phn tng ng 128 bit) khc vi MD5 c cng b, th tp tin bn ti v khc vi tp tin gc. Ngha l qu trnh download b li khin ti khng , hoc tp tin b sa i (chn trojan, virus, ..v.v..) so vi bn nguyn thy c MD5 a ln. ng dng Cc ng ha MD5 c dng rng ri trong cc phn mm trn ton th gii m bo vic truyn tp tin c nguyn vn. V d, my ch tp tin thng cung cp mt checksum MD5 c tnh ton trc cho tp tin, ngi dng c th so snh vi checksum ca tp tin ti v. Nhng h iu hnh da trn nn tng Unix lun km theo tnh nng MD5 sum trong cc gi phn phi ca h, trong khi ngi dng Windows s dng ng dng ca hng th ba. Tuy nhin, hin nay d dng to ra xung t MD5, mt ngi c th to ra mt tp tin to ra tp tin th hai vi cng mt checksum, do k thut ny khng th chng li mt vi dng gi mo nguy him. Ngoi ra, trong mt s trng hp checksum khng th tin tng c (v d, nu n c ly t mt lnh nh tp tin ti v), trong trng hp MD5 ch c th c chc nng kim tra li: n s nhn ra mt li hoc ti v cha xong, rt d xy ra khi ti tp tin ln. MD5 c dng rng ri lu tr mt khu. gim bt s d thng tn cp trn, ta c th thm mt chui vo mt khu trc khi bm chng. Mt vi hin thc c th p dng vo hm bm hn mt ln -xem lm mnh thm kha. Ly m MD5 trong C# Gii thut ca MD5 cng kh phc tp v vic ci t trong C# cng khng n gin. May mn thay, .NET hu nh lm sn cho chng ta mi vic. Tt c u gi gn trong lp MD5 nm trong namespace System.Security.Cryptography. Trong bi vit ny, ti s hng dn cc bn s dng lp ny vit mt ng dng to m MD5 cho mt chui v cho mt file.

u tin, ta s vit lp MD5Encoder bao gm 2 phng thc tnh ng m ha chui v file vi lp MD5. y l mt lp tru tng nn bn khng th k tha n. class MD5Encoder { public static string FromString(string Message) { // to i tng m ha MD5 MD5 MyMD5 = MD5.Create(); // m ha mng byte bng MD5 byte[] HashCode = MyMD5.ComputeHash(Encoding.Unicode.GetBytes(Message)); // chuyn mng byte thnh chui StringBuilder SB = new StringBuilder(); for (int i = 0; i < HashCode.Length; i++) SB.Append(HashCode[i].ToString("x2")); return SB.ToString(); } public static string FromFile(string FilePath) { // to i tng m ha MD5 MD5 MyMD5 = MD5.Create(); // c file FileStream fs = new FileStream(FilePath, FileMode.Open); // m ha mng byte bng MD5 byte[] HashCode = MyMD5.ComputeHash(fs); // chuyn mng byte thnh chui StringBuilder SB = new StringBuilder(); for (int i = 0; i < HashCode.Length; i++) SB.Append(HashCode[i].ToString("x2")); return SB.ToString(); } } Phng thc ComputeHash ca lp MD5 nhn u vo l mt mng byte hoc mt lung (stream) bt k v tr v mt mng kt qu gm 16 byte. Nhng kt qu m ta mong mun li l mt chui gm 32 k t. Lnh HashCode[i].ToString(x2)

c nhim v chuyn byte tng ng ca mng kt qu thnh mt chui Hexa gm 2 k t. Nh vy, vi 16 byte, ta s c c chui 32 k t. Tip theo ta s dng lp MD5Encoder vit mt ng dng nh. Bn thit k form nh hnh : Sau , ci t s kin cho cc control : private void cmdEncodeString_Click(object sender, EventArgs e) { txtResult.Text = MD5Encoder.FromString(txtMessage.Text); } private void cmdEncodeFile_Click(object sender, EventArgs e) { if (File.Exists(txtFilePath.Text)) txtResult.Text = MD5Encoder.FromFile(txtFilePath.Text); else MessageBox.Show("Khng tm thy file"); } private void cmdFindFile_Click(object sender, EventArgs e) { OpenFileDialog dlgFile = new OpenFileDialog(); dlgFile.Title = "Chn file"; dlgFile.Filter = "Tt c (*.*)|*.*"; dlgFile.FilterIndex = 0; if (dlgFile.ShowDialog() == System.Windows.Forms.DialogResult.OK) txtFilePath.Text = dlgFile.FileName; } Cui cng, chy th chng trnh v kim tra kt qu. Chc cc bn thnh cng.

You might also like