Dạy việc, học việc lập trình C#,ASP.NET, J2EE, J2SE, J2ME, silverlight,Oracle,SQL cơ bản và nâng cao
MD5 chuyển một đoạn thông tin chiều dài thay đổi thành một kết quả chiều dài không đổi 128 bit. Mẩu tin đầu vào được chia thành từng đoạn 512 bit; mẩu tin sau đó được độn sao cho chiều dài của nó chia chẵn cho 512. Công việc độn vào như sau: đầu tiên một bit đơn, 1, được gắn vào cuối mẩu tin. Tiếp theo là một dãy các số zero sao cho chiều dài của mẩu tin lên tới 64 bit ít hơn so với bội số của 512. Những bit còn lại được lấp đầy bằng một số nguyên 64-bit đại diện cho chiều dài của mẩu tin gốc.
Giải thuật MD5 chính hoạt động trên trạng thái 128-bit, được chia thành 4 từ 32-bit, với ký hiệu A, B, C và D.
Chúng được khởi tạo với những hằng số cố định. Giải thuật chính sau đó sẽ xử lý các khối tin 512-bit, mỗi khối xác định một trạng thái. Quá trình xử lý khối tin bao gômg bốn giai đoạn giống nhau, gọi là vòng; mỗi vòng gồm có 16 tác vụ giống nhau dựa trên hàm phi tuyến F, cộng mô đun, và dịch trái. Hình 1 mô tả một tác vụ trong một vòng. Có 4 khả năng cho hàm F; mỗi cái được dùng khác nhau cho mỗi vòng:
Đây là quá trình thực hiện xử lý của 4 hàm F, G, H, I ở trên:
Bạn đang đọc: Dạy việc, học việc lập trình C#,ASP.NET, J2EE, J2SE, J2ME, silverlight,Oracle,SQL cơ bản và nâng cao
Vòng 1 (Round 1):
Ký hiệu [abcd k s t] là bước thực hiện của phép toán a = b + ((a + F(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước sau:
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4] [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8] [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]Giải thích : ví dụ biểu thức thứ 2 là [ DABC 1 12 2 ], tương tự với :
D = A + ( ( D + F ( A, B, C ) + X [ 1 ] + T [ 2 ] ) < < < 12 ) Nhận xét : Vòng 1 dùng hàm F, Với giá trị t từ 1 -> 16 và k từ 1 -> 15Vòng 2 (Round 2):
Tương tự, ký hiệu [abcd k s t] là của biểu thức : a = b + ((a + G(b, c, d) + X[k] + T[t]) <<< s) Quá trình thực hiện 16 bước :
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
Nhận xét: Vòng 2 dùng hàm G, với t từ 17 -> 32 và k = 1 + 5k mod 16Vòng 3 (Round 3):
Tương tự, ký hiệu [abcd k s t] là của biểu thức : a = b + ((a + H(b, c, d) + X[k] + T[t]) <<< s)Quá trình thực hiện 16 bước:
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 1 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 5 16 47] [BCDA 2 23 48]
Nhận xét: Vòng 3 dùng hàm H, với t từ 33 -> 48 và k =5 + 3k mod 16
Vòng (Round 4):
Tương tự, ký hiệu [abcd k s t] là của biểu thức:
a = b + ((a + I(b,c,d) + X[k] + T[t]) <<< s)Quá trình thực hiện 16 bước :
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCDb 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]Nhận xét: Vòng 4 dùng hàm I, với t từ 49 -> 64 và k =7k mod 16
/* Sau đó làm các phép cộng sau. ( Nghĩa là cộng vào mỗi thanh ghi giá trị của nó trước khi vào vòng lặp ) */
A = A + AA
B = B + BB
C = C + CC
D = D + DD
End /* of loop on i */Bước 5 : Tính kết quả message digest. Sau khi thực hiện xong bước 4, thông điệp thu gọn nhận được từ 4 thanh ghi A, B, C, D, bắt đầu từ byte thấp của thanh ghi A và kết thúc với byte cao của thanh ghi D bằng phép nối như sau: Message Digest = A || B || C || D. ( || phép toán nối)
Một thao tác MD5 — MD5 gồm có 64 tác vụ thế này, nhóm trong 4 vòng 16 tác vụ. F là một hàm phi tuyết ; một hàm được dùng trong mỗi vòng. Mi chỉ ra một khối tin nhập vào 32 – bit, và Ki chỉ một hằng số 32 – bit, khác nhau cho mỗi tác vụ .
* Code ://// Copyright (c) 2008 All Right Reserved // //Doannv //[email protected] //Enables encryption of strings using the MD5 algorithm. namespace Banty.Security { using System; using System.Collections.Generic; using System.Reflection; using System.Security.Cryptography; using System.Text; using Banty.Exceptions; ////// Enables encryption of strings using the MD5 algorithm. /// public class MD5Crypt { ////// Encrypts a string using a specified security key with /// the option to hash. /// /// String to encrypt /// The key to apply to the encryption /// Weather hashing is used ///The encrpyted string public static string Encrypt(string toEncrypt, string securityKey, bool useHashing) { string retVal = string.Empty; try { byte[] keyArray; byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt); // Validate inputs ValidateInput(toEncrypt); ValidateInput(securityKey); // If hashing use get hashcode regards to your key if (useHashing) { MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8 .GetBytes(securityKey)); // Always release the resources and flush data // of the Cryptographic service provide. Best Practice hashmd5.Clear(); } else { keyArray = UTF8Encoding.UTF8.GetBytes(securityKey); } TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); // Set the secret key for the tripleDES algorithm tdes.Key = keyArray; // Mode of operation. there are other 4 modes. // We choose ECB (Electronic code Book) tdes.Mode = CipherMode.ECB; // Padding mode (if any extra byte added) tdes.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tdes.CreateEncryptor(); // Transform the specified region of bytes array to resultArray byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); // Release resources held by TripleDes Encryptor tdes.Clear(); // Return the encrypted data into unreadable string format retVal = Convert.ToBase64String(resultArray, 0, resultArray.Length); } catch (Exception ex) { throw new EncryptionException(EncryptionException. Code.EncryptionFailure, ex, MethodBase.GetCurrentMethod()); } return retVal; } ////// Decrypts a specified key against the original security /// key, with the option to hash. /// /// String to decrypt /// The original security key /// Weather hashing is enabled ///The decrypted key public static string Decrypt(string cipherString, string securityKey, bool useHashing) { string retVal = string.Empty; try { byte[] keyArray; byte[] toEncryptArray = Convert.FromBase64String(cipherString); // Validate inputs ValidateInput(cipherString); ValidateInput(securityKey); if (useHashing) { // If hashing was used get the hash code with regards to your key MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider(); keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8. GetBytes(securityKey)); // Release any resource held by the MD5CryptoServiceProvider hashmd5.Clear(); } else { // If hashing was not implemented get the byte code of the key keyArray = UTF8Encoding.UTF8.GetBytes(securityKey); } TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); // Set the secret key for the tripleDES algorithm tdes.Key = keyArray; // Mode of operation. there are other 4 modes. // We choose ECB(Electronic code Book) tdes.Mode = CipherMode.ECB; // Padding mode(if any extra byte added) tdes.Padding = PaddingMode.PKCS7; ICryptoTransform cTransform = tdes.CreateDecryptor(); byte[] resultArray = cTransform.TransformFinalBlock( toEncryptArray, 0, toEncryptArray.Length); // Release resources held by TripleDes Encryptor tdes.Clear(); // Return the Clear decrypted TEXT retVal = UTF8Encoding.UTF8.GetString(resultArray); } catch (Exception ex) { throw new EncryptionException(EncryptionException.Code. DecryptionFailure, ex, MethodBase.GetCurrentMethod()); } return retVal; } ////// Validates an input value /// /// Specified input value ///True | Falue - Value is valid private static bool ValidateInput(string inputValue) { bool valid = string.IsNullOrEmpty(inputValue); if (!valid) { throw new EncryptionException(EncryptionException.Code. InvalidInputValues, MethodBase.GetCurrentMethod()); } return valid; } } } Chúc các bạn thành công!Share this:
Thích bài này:
Đang tải …
Source: https://thomaygiat.com
Category : Kỹ Thuật Số
Chuyển vùng quốc tế MobiFone và 4 điều cần biết – MobifoneGo
Muốn chuyển vùng quốc tế đối với thuê bao MobiFone thì có những cách nào? Đừng lo lắng, bài viết này của MobiFoneGo sẽ giúp…
Cách copy dữ liệu từ ổ cứng này sang ổ cứng khác
Bạn đang vướng mắc không biết làm thế nào để hoàn toàn có thể copy dữ liệu từ ổ cứng này sang ổ cứng khác…
Hướng dẫn xử lý dữ liệu từ máy chấm công bằng Excel
Hướng dẫn xử lý dữ liệu từ máy chấm công bằng Excel Xử lý dữ liệu từ máy chấm công là việc làm vô cùng…
Cách nhanh nhất để chuyển đổi từ Android sang iPhone 11 | https://thomaygiat.com
Bạn đã mua cho mình một chiếc iPhone 11 mới lạ vừa ra mắt, hoặc có thể bạn đã vung tiền và có một chiếc…
Giải pháp bảo mật thông tin trong các hệ cơ sở dữ liệu phổ biến hiện nay
Hiện nay, với sự phát triển mạnh mẽ của công nghệ 4.0 trong đó có internet và các thiết bị công nghệ số. Với các…
4 điều bạn cần lưu ý khi sao lưu dữ liệu trên máy tính
08/10/2020những chú ý khi tiến hành sao lưu dữ liệu trên máy tính trong bài viết dưới đây của máy tính An Phát để bạn…