View Full Version : چگونگی ایجاد hash از string
M.Hashemi
شنبه 16 اردیبهشت 1391, 16:16 عصر
با سلام
من می خواهم در دلفی یک string را hash کنم.
اما تا جایی گشتم دیدم تنها md5 را پشتیبانی می کند.
چند کامپوننت نیز پیدا کردم که sha1 تا sha512 را نیز پشتیبانی می کرد اما این کامپوننت ها تنها می توانستند فایل را hash کنند و توانایی hash کردن string را نداشتند.
اگر ممکنه کامپوننتی یا یونیتی را معرفی بکنید که بتواند string را با الگوریتم های دیگر مانند sha512 هش کند.
من از embarcadero delphi xe2 update4 استفاده می کنم.
با تشکر
hamid-nic
شنبه 16 اردیبهشت 1391, 18:17 عصر
سلام
از کامپوننت TurboPower LockBox استفاده کنید
mehdi.mousavi
شنبه 16 اردیبهشت 1391, 19:01 عصر
با سلام من می خواهم در دلفی یک string را hash کنم. اما تا جایی گشتم دیدم تنها md5 را پشتیبانی می کند. چند کامپوننت نیز پیدا کردم که sha1 تا sha512 را نیز پشتیبانی می کرد اما این کامپوننت ها تنها می توانستند فایل را hash کنند و توانایی hash کردن string را نداشتند. اگر ممکنه کامپوننتی یا یونیتی را معرفی بکنید که بتواند string را با الگوریتم های دیگر مانند sha512 هش کند. من از embarcadero delphi xe2 update4 استفاده می کنم. با تشکر
سلام.
اگر از سیستم عامل Windows استفاده می کنید، می تونید از CryptGetHashParam Win32 API (http://msdn.microsoft.com/en-us/library/windows/desktop/aa379947%28v=vs.85%29.aspx) استفاده کرده و CALG_SHA_512 رو بعنوان پارامتر به تابع پاس کنید.
برای مشاهده نمونه به این آدرس (http://www.scalabium.com/faq/dct0173.htm) رجوع کنید.
موفق باشید.
delphidark
شنبه 16 اردیبهشت 1391, 19:10 عصر
دوست عزیز میتونید از یونیت CHILKATCRYPT2Lib استفاده کنید (برای دانلود اسمش رو گوگل کنید)
این هش ها رو هم ساپورت میکنه :
SHA-1, HAVAL, MD2, MD5, SHA-256, SHA-384, SHA-512
موفق باشید ...
M.Hashemi
شنبه 16 اردیبهشت 1391, 21:47 عصر
با سلام
ممنون از جوابتون.
اما:
1- کامپوننت TurboPower LockBox را نتونستم پیدا کنم و CHILKATCRYPT2Lib هم که ActiveX بود(هر دو نیاز به فعال سازی دارند).2- از CryptGetHashParam Win32 API (http://msdn.microsoft.com/en-us/library/windows/desktop/aa379947%28v=vs.85%29.aspx) هم متوجه نشدم که چجوری میتونم استفاده کنم.
اگر ممکنه یک مثال بزنید یا یک سورس کوچک بگذارید.
ببخشید که اطلاعاتم کمه.
باز هم از وقتی که گذاشتید ممنونم.
با تشکر
delphidark
یک شنبه 17 اردیبهشت 1391, 23:03 عصر
برای API که جناب mehdi.mousavi آدرس کد نمونه رو هم قرار دادن و کاملترش رو هم حتما در MSDN پیدا خواهید کرد ...
در مورد CHILKATCRYPT2Lib هم همونطور که گفتید رایگان نیست
اما این پروژه رایگان و اپن سورس هست (http://www.cityinthesky.co.uk/opensource/DCPcrypt)
البته من خودم شخصا ازش استفاده نکردم اما به نظر چیز کاملی میاد
موفق باشید.
M.Hashemi
دوشنبه 18 اردیبهشت 1391, 15:47 عصر
با سلام
ممنون از وقتی که گذاشتید.
کامپوننت dcpCrypt که معرفی کردید تا جایی که من میدونم و تست کردم فقط فایل ها را hash می کند.
در مورد کامپوننت lock box هم باید بگم هنگام نصب ادرس dcu output directory را می خواهد که من هرچه در tools->options->library گشتم چنین پوشه ای را ندیدم و به همین دلیل نتونستم ان را درست نصب کنم.
----------------
فقط تونستم از gethashparam win32 api استفاده کنم، البته به کمک شما دوستان عزیز و سایت زیر :
http://irsoft.de/web/Delphi-MD5
اما 3 مشکل دارد:
1- md5 را که بر میگردونه اشتباه است، البته تو سایت بالا راه حلی ارائه داده اما من متوجه نشدم، اگر ممکنه در این مورد توضیح دهید؟
2- زمانی که در کد به جای md5 می نویسم sha1 هیچ string تولید نمی کند، فکر کنم function مربوط به sha باید به گونه ای دیگر نوشته شود؟
3- تابع به جای md5 نمی تواند CALG_SHA_512 را به عنوان ورودی بگیرد، اگر ممکنه در این مورد توضیح دهید؟
* البته من از unit به نام Wcrypt2.pas که سایت معرفی کرده بود استفاده کردم.
اگر دوستان جواب این مشکلات را می دانند، خواهش می کنم جواب بدند چون این sha512 برام اهمیت زیادی دارد.
با تشکر
BORHAN TEC
دوشنبه 18 اردیبهشت 1391, 16:43 عصر
سلام،
کی گفته که خود دلفی این قابلیت رو نداره؟
همانطور که گفتید از Delphi XE 2 استفاده می کنید. بنابراین می توانید از Hash های مختلف در آن استفاده کنید. البته لازم به ذکر است که کتابخانه های مربوطه به Indy مرتبط هستند. در نتیجه شما در دلفی بدون هیچ کامپوننت اضافه ای می توانید از انواع الگوریتم های Hashing استفاده کنید از جمله Sha1، MD5، MD4 و CRC32 و ... .
این هم یک مثال که البته در C++ Builder است که به راحتی می توانید با کمی تغییر از آن در دلفی هم استفاده کنید. همچنین می توانید از آن به راحتی در String ها هم استفاده کنید:
http://barnamenevis.org/showthread.php?278972
اگر باز هم سوالی هست من در خدمتم.
البته این قابلیت فقط مربوط به دلفی Xe2 نیست و در نسخه های قبلی هم قابل استفاده است.:لبخند:
M.Hashemi
سه شنبه 19 اردیبهشت 1391, 14:43 عصر
سلام،
کی گفته که خود دلفی این قابلیت رو نداره؟
همانطور که گفتید از Delphi XE 2 استفاده می کنید. بنابراین می توانید از Hash های مختلف در آن استفاده کنید. البته لازم به ذکر است که کتابخانه های مربوطه به Indy مرتبط هستند. در نتیجه شما در دلفی بدون هیچ کامپوننت اضافه ای می توانید از انواع الگوریتم های Hashing استفاده کنید از جمله Sha1، MD5، MD4 و CRC32 و ... .
این هم یک مثال که البته در C++ Builder است که به راحتی می توانید با کمی تغییر از آن در دلفی هم استفاده کنید. همچنین می توانید از آن به راحتی در String ها هم استفاده کنید:
http://barnamenevis.org/showthread.php?278972
اگر باز هم سوالی هست من در خدمتم.
البته این قابلیت فقط مربوط به دلفی Xe2 نیست و در نسخه های قبلی هم قابل استفاده است.:لبخند:
با سلام
مرسی اقا شاهین.
خیلی عالی بود.
اما یک مشکل کوچک است.
زمانی از Tidhashsha1 استفاده می کنم کاملا درست کار می کند.
اما زمانی از Tidhashsha224 تا Tidhashsha512 استفاده می کنم هیچ string ی را برگشت نمی دهد.
طبق لینکی که گذاشتید من در دلفی به این صورت کدنویسی کردم:
procedure TForm1.Button1Click(Sender: TObject);
var
sthash: TIdHashSHA512;
begin
sthash := TIdHashSHA512.Create;
try
ShowMessage(sthash.HashStringAsHex('a'));
finally
sthash.Free;
end;
end;
ببخشید از این که وقت همه را گرفتم.
اگر ممکنه در این مورد توضیح دهید.
با تشکر
BORHAN TEC
چهارشنبه 27 اردیبهشت 1391, 15:07 عصر
اما زمانی از Tidhashsha224 تا Tidhashsha512 استفاده می کنم هیچ string ی را برگشت نمی دهد.دلیلش رو نمیدونم. شاید این مورد را قصد دارند در نسخه های بعدی قرار بدن.
به هر حال نمی دونم که شما چرا از Sha1 استفاده نمی کنید. به نظر من همون sha1 در تمامی موارد جوابگو است و اگر می خواهید خیلی دقیقتر کار کنید کافی است که از ترکیب Sha1 با یکی از متدهای دیگر مثل MD5 استفاده کنید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.