2010-07-05 25 views
6

Paralel olarak birkaç DB ile çalışma ve bazı kayıtları hashed parolalarıyla başlatmanız gerekir.SQL1'de SHA1 hashing: nasıl?


HashBytes('SHA1', CONVERT(nvarchar(32), N'admin')) 

SQLite benzer bir işlevi var mı: MS SQL server yılında anında karma izin kullanışlı fonksiyonlar vardır?

Değilse, hangisi en kolay çözümdür (örneğin, SQL server'dan birini seçin ve bir şekilde SQLite tablolarına ekleyin)?

tercih edilen bir müzakere algoritması SHA1 ve şifreleri BLOB sütunda depolanır.

Güncelleme: Geçerli projede C# dili kullanmaktadır.

+5

SHA-1 bir şifreleme ancak kriptografik hash fonksiyonu değildir. – Gumbo

+2

SHA1, şifrelerle karıĢmak için iyi bir seçim değildir, çünkü hızlı olmanın yollarıdır ve bu nedenle kaba taarruzu kolaylaştırır. BCrypt ya da PBKDF2 gibi anahtar türetme fonksiyonlarına bir göz atın, ikincisi C# içinde yerleşik olup, BCrypt kütüphaneleri mevcuttur. – martinstoeckli

cevap

10

SQLite3 yerleşik böyle işlevi yoktur.

Ama örneğin bir Kullanıcı fonksiyonu tanımlayabilir C arayüzünü kullanıyorsanız ve bununla SHA-1 uygularsanız, sqlite3_create_function ile. (Ancak programlanabilir bir arayüze sahipseniz, belki de SQL motorunun dışındaki parola SHA-1'i kullanabilirsiniz.)

Ayrıca bir uzantı bulmaya/oluşturmaya ve the load_extension function ile yüklemeye çalışabilirsin, ancak bununla ilgili deneyimim var.

Düzenleme:

4

SQLite SHA1 gelmiyor, ama nispeten kolayca eklemektir. Hangi dili kullandığınızı söylemediniz, ancak create_function ve sqlite3_result için C belgelerine bakabilirsiniz. Ruby kullanarak SH1 yazılımını SQLite'ye eklemek için this example'a da bakabilirsiniz. System.Data.SQLite ile

, bunlar kullanıcı tanımlı işlevler deniyor. Ana sitede this example'a bakabilirsiniz.

+0

Win platformunda C#/.NET kullanıyorum (soru gövdesi güncellenir) – BreakPhreak

1

Bildiğim kadarıyla, SQLite'de yerleşik hiçbir karma işlevi yoktur.

SQLite'e özel işlevler eklemek için a way var, ancak SHA1 karmasını programınızda hesaplar ve SQlite'de saklarsanız daha kolay olur.

SQLite için özel işlevler oluşturmak, API'ya ve kullandığınız dile bağlıdır. Sadece Python'dan SQLite fonksiyonları oluşturma konusunda tecrübem var.

3

Böyle C# SHA1 için özel bir işlev oluşturabilirsiniz:

[SQLiteFunction(Name = "Sha1", Arguments = 1, FuncType = FunctionType.Scalar)] 
public class Sha1 : SQLiteFunction 
{ 
    public override object Invoke(object[] args) 
    { 
     var buffer = args[0] as byte[]; 

     if (buffer == null) 
     { 
      var s = args[0] as string; 

      if (s != null) 
       buffer = Encoding.Unicode.GetBytes(s); 
     } 

     if (buffer == null) 
      return null; 

     using (var sha1 = SHA1.Create()) 
     { 
      return sha1.ComputeHash(buffer); 
     } 
    } 
} 

Bu fonksiyon, ikili veri veya dizeleri çağrılabilir. Dizeler Unicode gösterimlerinde hashed edilir. Bu SQL Server ile eşleşmelidir.

fonksiyonu

böyle çağrılabilir:

select sha1('abc') 
select sha1(x'010203') 
İlgili konular