.NET ফ্রেমওয়ার্কটি 6 টি বিভিন্ন হ্যাশিং অ্যালগোরিদম সহ জাহাজগুলি:
- MD5: 16 বাইট (হ্যাশ থেকে 500MB: 1462 এমএস করার সময়)
- SHA-1: 20 বাইট (1644 এমএস)
- SHA256: 32 বাইট (5618 এমএস)
- SHA384: 48 বাইট (3839 এমএস)
- SHA512: 64 বাইট (3820 এমএস)
- রিপেমড: 20 বাইট (7066 এমএস)
এই ফাংশনগুলির প্রতিটি পৃথকভাবে সম্পাদন করে; MD5 সবচেয়ে দ্রুত এবং RIPEMD সবচেয়ে ধীর হচ্ছে।
MD5 এর সুবিধা রয়েছে যে এটি বিল্ট-ইন গাইড প্রকারের সাথে ফিট করে; এবং এটি 3 ইউআইডি টাইপের ভিত্তি । SHA-1 হ্যাশ হ'ল টাইপ 5 ইউআইইউডের ভিত্তি। যা তাদের সনাক্তকরণের জন্য ব্যবহার করা সত্যিই সহজ করে তোলে।
MD5 তবে সংঘর্ষের আক্রমণে ঝুঁকিপূর্ণ , SHA-1 এছাড়াও ঝুঁকিপূর্ণ তবে কম ডিগ্রি পর্যন্ত।
কোন অবস্থায় আমি কোন হ্যাশিং অ্যালগরিদম ব্যবহার করব?
নির্দিষ্ট প্রশ্নগুলির উত্তরগুলি দেখতে আমি সত্যিই আগ্রহী:
এমডি 5 বিশ্বাসযোগ্য নয়? সাধারণ পরিস্থিতিতে যখন আপনি কোনও দূষিত অভিপ্রায় ছাড়াই এমডি 5 অ্যালগরিদম ব্যবহার করেন এবং কোনও তৃতীয় পক্ষের কোনও দূষিত অভিপ্রায় না থাকে আপনি কি কোনও সংঘর্ষের প্রত্যাশা করবেন (অর্থাত্ দুটি সালিশী বাইট [] একই হ্যাশ উত্পাদন করে)
SHIP1 এর চেয়ে রিপেমড আর কত ভাল? (যদি এটি আরও ভাল হয়) এর 5 গুণ গণনা করতে ধীর হলেও হ্যাশের আকারটি SHA1 এর মতো।
ফাইল-নামগুলি (বা অন্যান্য সংক্ষিপ্ত স্ট্রিং) হ্যাশ করার সময় অ-দূষিত সংঘর্ষ পাওয়ার পক্ষে কোনটি? (উদাহরণস্বরূপ, একই এমডি 5 হ্যাশ সহ 2 টি এলোমেলো ফাইলের নাম) (MD5 / SHA1 / SHA2xx সহ) সাধারণভাবে দূষিত সংঘর্ষের জন্য কী প্রতিক্রিয়া রয়েছে?
এটি আমি ব্যবহার করা মানদণ্ড:
static void TimeAction(string description, int iterations, Action func) {
var watch = new Stopwatch();
watch.Start();
for (int i = 0; i < iterations; i++) {
func();
}
watch.Stop();
Console.Write(description);
Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
}
static byte[] GetRandomBytes(int count) {
var bytes = new byte[count];
(new Random()).NextBytes(bytes);
return bytes;
}
static void Main(string[] args) {
var md5 = new MD5CryptoServiceProvider();
var sha1 = new SHA1CryptoServiceProvider();
var sha256 = new SHA256CryptoServiceProvider();
var sha384 = new SHA384CryptoServiceProvider();
var sha512 = new SHA512CryptoServiceProvider();
var ripemd160 = new RIPEMD160Managed();
var source = GetRandomBytes(1000 * 1024);
var algorithms = new Dictionary<string,HashAlgorithm>();
algorithms["md5"] = md5;
algorithms["sha1"] = sha1;
algorithms["sha256"] = sha256;
algorithms["sha384"] = sha384;
algorithms["sha512"] = sha512;
algorithms["ripemd160"] = ripemd160;
foreach (var pair in algorithms) {
Console.WriteLine("Hash Length for {0} is {1}",
pair.Key,
pair.Value.ComputeHash(source).Length);
}
foreach (var pair in algorithms) {
TimeAction(pair.Key + " calculation", 500, () =>
{
pair.Value.ComputeHash(source);
});
}
Console.ReadKey();
}