2012-03-14 18 views
14

मैं bcrypt कार्यान्वयन को खोजने का प्रयास कर रहा हूं जिसका उपयोग मैं डेल्फी में कर सकता हूं। गूगलिंग मुझे एकमात्र उपयोगी चीज के बारे में this download page है, जिसमें bcrypt.h नामक एक विनपी इकाई के लिए अनुवादित शीर्षलेख शामिल हैं। लेकिन जब मैं यह कार्यक्षमता देखता हूं, bcrypt.h वास्तव में ब्लॉफ़िश एल्गोरिदम का उपयोग हैश पासवर्ड में करने का कोई तरीका नहीं है!क्या डेल्फी के लिए कोई बीक्रिप्ट कार्यान्वयन उपलब्ध है?

मुझे सी में कुछ बीक्रिप्ट कार्यान्वयन मिल गए हैं कि मैं एक डीएलएल बना सकता हूं और लिंक कर सकता हूं, सिवाय इसके कि उन्हें सभी आवश्यक * निक्स या जीसीसी-विशिष्ट होना चाहिए, ताकि यह काम न करे!

यह मुझे दीवार को चला रहा है। मुझे लगता है कि कार्यान्वयन को ढूंढना आसान होगा, लेकिन ऐसा लगता है कि यह मामला बिल्कुल नहीं है। क्या किसी को पता है कि मैं कहां प्राप्त कर सकता हूं?

+2

पर उपलब्ध है क्या आप Vista में पेश किए गए विंडोज बीक्रिप्ट पर विचार करने के लिए तैयार हैं? जेडीआई के पास हेडर अनुवाद है: JwaBCrypt.pas –

+0

@ डेविड: यह प्रश्न में उल्लिखित 'bcrypt.h' winapi शीर्षलेख का एक और अनुवाद प्रतीत होता है, जो वास्तव में ब्लॉफिश पासवर्ड-हैशिंग कार्यान्वयन नहीं करता है । (या क्या मुझे कुछ याद आ रही है?) –

+0

रुडी का हेडर जेडीआई की उत्पत्ति है, http://blog.delphi-jedi.net/2008/03/10/new-and-additional-header-files-from-rudy/ –

उत्तर

18

ठीक है, इसलिए मैंने इसे लिखा।

उपयोग:

hash: string; 
hash := TBCrypt.HashPassword('mypassword01'); 

रिटर्न कुछ की तरह:

$2a$10$Ro0CUfOqk6cXEKf3dyaM7OhSCvnwM9s4wIX9JeLapehKK5YdLxKcm 

इस (OpenBSD) शैली पासवर्ड हैश के बारे में उपयोगी बात है:

  • कि यह एल्गोरिथ्म की पहचान करता है (2a = bcrypt)
  • साल स्वचालित रूप से आप के लिए बनाया है, और हैश (Ro0CUfOqk6cXEKf3dyaM7O)
  • लागत कारक पैरामीटर भी हैश (10) के साथ किया जाता है के साथ भेज दिया है।

एक पासवर्ड की जांच करने के सही है:

isValidPassword: Boolean; 
isValidPassword := TBCrypt.CheckPassword('mypassword1', hash); 

BCrypt एक लागत कारक है, जो निर्धारित करता है कि कितने पुनरावृत्तियों कुंजी सेटअप हालांकि जाना होगा उपयोग करता है। लागत जितनी अधिक होगी, हैश की गणना करना उतना महंगा होगा।

const 
    BCRYPT_COST = 10; //cost determintes the number of rounds. 10 = 2^10 rounds (1024) 

इस मामले में 10 की लागत का मतलब है कुंजी विस्तार किया जाएगा और नमकीन 2 10 = 1,024 राउंड: निरंतर BCRYPT_COST डिफ़ॉल्ट लागत में शामिल है। यह समय पर इस बिंदु पर आमतौर पर उपयोग किया जाने वाला लागत कारक है (शुरुआती 21 सेंट शताब्दी)।

यह भी दिलचस्प है कि, किसी ज्ञात कारण के लिए, ओपनबीएसडी हैश किए गए पासवर्ड को बेस -64 संस्करण में परिवर्तित कर दिया गया है जो कि ग्रह पर हर किसी के द्वारा उपयोग की जाने वाली बेस 64 से अलग है। तो TBCrypt में कस्टम बेस -64 एन्कोडर और डिकोडर शामिल है।

यह भी ध्यान रखें कि हैश एल्गोरिथ्म संस्करण 2a मतलब करने के लिए प्रयोग किया जाता है उपयोगी होता है:

  • bcrypt
  • पासवर्ड के अशक्त टर्मिनेटर शामिल टुकड़ों में बांटा डेटा में
  • यूनिकोड तार UTF-8 एन्कोडेड
  • हैं

तो यही वजह है कि HashPassword और CheckPassword कार्यों एक WideString (उर्फ 012,366 ले), और आंतरिक रूप से उन्हें यूटीएफ -8 में परिवर्तित करें। आप डेल्फी का एक संस्करण जहां UnicodeString एक आरक्षित शब्द है पर इस चला रहे हैं, तो बस बाहर परिभाषित:

type 
    UnicodeString = WideString; 

मैं, के रूप में डेविड हेफेरनान जानता है, डेल्फी XE 2. नहीं है जिसे मैं UnicodeString उर्फ ​​जोड़ा , लेकिन compilers.inc शामिल नहीं किया और UnicodeString को परिभाषित करें (क्योंकि मुझे नाम परिभाषित नहीं किया गया है, न ही मैं इसका परीक्षण कर सकता हूं)। आप मुफ्त कोड से क्या चाहते हैं?

कोड दो इकाइयों के शामिल हैं:

  • Bcrypt.pas (जो मैं ने लिखा है, एम्बेडेड DUnit परीक्षण के साथ)
  • Blowfish.pas (जो डेव बार्टन ने लिखा है, जो मैं अनुकूलित, बढ़ाया, कुछ कीड़े तय की और DUnit जोड़ा परीक्षण)।

इंटरबेट्स पर जहां मैं कुछ कोड डाल सकता हूं जहां यह शाश्वतता में रह सकता है?

अद्यतन 1/1/2015: इसे कुछ समय पहले गिटहब पर रखा गया था: BCrypt for Delphi

बोनस 2015/04/16: वहाँ अब Scrypt for Delphi

+2

शाश्वतता है? वास्तव में कहीं नहीं। लेकिन सोर्सफोर्ज, Google कोड, गिटहब, या बिटबकेट अच्छे उम्मीदवार हैं जो बहुत लंबे समय तक रहना चाहिए। – afrazier

+0

अब उत्तर में फ़ाइल नाम ('bcrypt.pas',' blowfish.pas') पेस्टबिन से लिंक करें। –

+0

वास्तव में इसे बिटबकेट पर रखना चाहिए! –

0

bcrypt के रूप में है जानवर बल हमलों से अधिक संवेदनशील होना कहा जाता है (this विकिपीडिया लेख के अनुसार), scrypt 2010 एक डेल्फी में विकसित किया गया है कार्यान्वयन http://www.wolfgang-ehrhardt.de/crchash_de.html

संबंधित मुद्दे