การใช้งาน. net ของ bcrypt


116

มีใครรู้บ้างเกี่ยวกับการใช้งาน bcrypt ที่ดีฉันรู้ว่ามีการถามคำถามนี้มาก่อน แต่ได้รับการตอบกลับน้อยมาก ฉันไม่แน่ใจเล็กน้อยที่จะเลือกการใช้งานที่ปรากฏใน Google และฉันคิดว่าฉันอาจจะดีกว่าการใช้ sha256 ใน System.Security.Cryptography namespace อย่างน้อยฉันก็รู้ว่ามันรองรับ! คุณคิดอะไรอยู่?

คำตอบ:


58

ดูเหมือนว่าคุณกำลังมองหาBCrypt.net :

BCrypt.net คือการนำโค้ดแฮชรหัสผ่านที่ใช้ Blowfish ของ OpenBSD มาใช้ซึ่งอธิบายไว้ใน "A Future-Adaptable Password Scheme" โดย Niels Provos และ David Mazières มันเป็นพอร์ตโดยตรงของ jBCrypt โดย Damien Miller และได้รับการเผยแพร่ภายใต้ใบอนุญาตสไตล์ BSD เดียวกัน โค้ดได้รับการจัดการอย่างสมบูรณ์และควรทำงานร่วมกับการใช้งาน CLI ที่ไม่ค่อยมีคนรู้จัก - ได้รับการทดสอบกับ Microsoft .NET และ Mono


ใช่นั่นคือสิ่งที่ฉันพบใน Google ด้วย คุณใช้มันหรือคุณรู้ว่ามันใช้กันอย่างแพร่หลาย?
Gareth

2
เหตุผลที่ฉันคิดจะใช้ BCrypt เป็นเพราะบทความนี้matasano.com/log/958/…และอ้างว่า BCrypt เป็นวิธีที่จะไป
Gareth

13
แค่ต้องการเพิ่มหมายเหตุว่าหากคุณใช้ BCrypt.net บน Windows Server 2008 คุณจะต้องตั้งชื่อเป็นอย่างอื่นที่ไม่ใช่ BCrypt.dll มิฉะนั้นจะขัดแย้งกับ Windows API ใหม่ใน Vista ที่เรียกใช้ฟังก์ชันใน 'bcrypt dll 'ดังนั้นหากคุณมี Bcrypt.net เป็น Bcrypt.dll ในเว็บแอป bin / ไดเรกทอรี Windows จะไม่สามารถค้นหา dll ที่ถูกต้องได้และคุณจะได้รับข้อผิดพลาดที่เป็นความลับ
thelsdj

5
หมายเหตุ: เหตุผลต่อไปนี้ว่าทำไมต้องใช้ bCrypt (สำหรับผู้ที่สนใจ) codahale.com/how-to-safely-store-a-password
thames

1
ย้ายบทความแล้ว: chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow- tables-what-you-need-to-know-about-s.html
Code Silverback

25

BCrypt.Net ดูเหมือนจะเป็นไลบรารีที่ได้รับความนิยมมากที่สุดในขณะนี้

http://bcrypt.codeplex.com/

นี่คือตัวอย่างวิธีใช้สำหรับการแฮชรหัสผ่าน:

[TestMethod]
    public void BCryptTest()
    {
        const string password = "PASSWORD";
        const int workFactor = 13;

        var start = DateTime.UtcNow;
        var hashed = BCrypt.Net.BCrypt.HashPassword(password, workFactor);
        var end = DateTime.UtcNow;

        Console.WriteLine("hash length is {0} chars", hashed.Length);
        Console.WriteLine("Processing time is {0} with workFactor {1}", end - start, workFactor);
        Console.WriteLine("Hashed password: {0} ", hashed);
        Console.WriteLine("correct password {0}", BCrypt.Net.BCrypt.Verify("PASSWORD", hashed));
        Console.WriteLine("incorrect password {0}", BCrypt.Net.BCrypt.Verify("PASSWORd", hashed));
    }

ตัวอย่างผลลัพธ์:

hash length is 60 chars
Processing time is 00:00:01.0020000 with workFactor 13
Hashed password: $2a$13$iBqdG7ENBABEargiyzGlTexPsmviF/qrFxUZB2zce7HKF6MoBNhEq 
correct password True
incorrect password False


6

ฉันต้องการการใช้งาน BCrypt เมื่อย้ายบางสิ่งจาก PostgreSQL (ซึ่งมี pg_crypto) ไปยัง SQLite (ซึ่งไม่มี) ดังนั้นฉันจึงเขียนของฉันเอง เมื่อเห็นข้อความนี้ฉันไม่ใช่คนเดียวที่ต้องการสิ่งนี้ฉันตัดสินใจที่จะตบใบอนุญาตและปล่อยมัน URL คือ:

http://zer7.com/software.php?page=cryptsharp

การติดตั้ง Blowfish ที่อยู่เบื้องหลังเป็นพอร์ตของการใช้งาน C โดเมนสาธารณะของ Bruce Schneier และประสบความสำเร็จในเวกเตอร์การทดสอบอย่างเป็นทางการทั้งหมด

รหัส BCrypt ที่ฉันเขียนเองตามข้อมูลจำเพาะ ฉันยังสร้างสคริปต์ PHP ซึ่งสร้างรหัสผ่านแบบสุ่มที่มีความยาว 0 ถึง 100 และ salts เข้ารหัสและส่งออกไปยังไฟล์ทดสอบ รหัส C # ตรงกับเวลาทั้งหมดนี้ 100% คุณสามารถใช้สคริปต์และทดสอบได้ด้วยตัวเอง

ไลบรารียังมีรหัส PBKDF2 ซึ่งใช้งานได้กับ HMAC ใด ๆ เมื่อเทียบกับการใช้งาน SHA-1 เท่านั้นของ. Net (เพิ่มวันนี้ - ฉันตั้งใจจะทำ SCrypt ใน C # เร็ว ๆ นี้และต้องใช้ PBKDF2 กับ HMAC-SHA256) คุณสามารถสร้างรูปแบบให้กับตัวเองได้เช่นกันหากคุณต้องการ


0

คำตอบผิดโปรดดูด้านล่าง

อัลกอริทึมแบบ postfixed "Cng" (Cryptography Next Generation) ทั้งหมดใน. Net Framework ใช้ bcrypt เช่นSHA256Cng .


ที่จริงแล้ว MS BCrypt (BestCrypt) ไม่ได้อ้างถึงอันที่อ้างอิงจากการเข้ารหัสปักเป้า - ขอบคุณ RobbyD สำหรับความคิดเห็น
จะไม่ลบคำตอบในกรณีที่มีใครทำให้สับสนเหมือนกัน


1
BCrypt ในบริบทนั้นอ้างถึงชื่อ Microsoft PR BestCrypt ดูstackoverflow.com/questions/9711568/…สำหรับรายละเอียดเพิ่มเติม
RobbyD

-2

คุณเคยลองใช้ฟังก์ชันMS BCryptCreateHash C ++หรือไม่? ดูเหมือนจะนำเสนอจาก Windows Server 2008 และ Windows Vista

นอกจากนี้คุณอาจตรวจสอบคลาสMS C # BCryptNative.csต่อไปนี้ได้เช่นกัน


ดูstackoverflow.com/questions/9711568/… - สิ่งที่ windows bcrypt ไม่เกี่ยวข้องกับ bcrypt
เบ็น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.