Tablomdaki bir sütunu şifrelemek istiyorum.
Ama bu kolonu bir kaç yerde arama yaparken kullanıyorum Laravel'in encrypt yöntemi hep farklı şekilde şifreleme yapıyor
Yani ben 'Nurullah' stringini şifreliyip db ye koyduğumda arama yaptığım yerde 'Nu' kelimesi ile arama yaptığımda içinde Nu stringi geçen tüm kolonları bulabilmem lazım bunun için nasıl bir yol izlemeliyim ?
Aklıma gelen şey kendime göre bir şifreleme ve çözme fonksiyonu yazıp set ederken şifreleyip koyup arama yaparken de arma yapılan şeyi şifreleyip bu şifrelenmiş string ile şifrelenmiş veriler içindenn arama yaptırmak
Siz ne dersiniz ?
Laravel Şifreleme İle ilgili
$hashedValue = Hash::make($value);
$searchValue = Hash::make($searchString);
$results = Model::where('column', $hashedValue)->get();
Ne kadar mantıklı emin değilim Ama örnek vermek gerekirse Şifreyi hashleyip kaydediyoruz kullanıcı tekrar şifreyi girdiğin de o hash'li alanla eşleşiyorsa işleme devam ediyor giriyor sisteme demek ki mantıken 2 hashli parametre aynı ise search yapılabilir diye düşünüyorum
nuri60 Mesela MySQL kullanıyorsanız:
$key = '12345';
$names = ['Nurullah', 'Mustafa'];
$insertData = [];
foreach($names as $name) {
$insertData[] = [
'name' => DB::raw("AES_ENCRYPT('{$name}', '{$key}')"),
];
}
DB::table('users')
->insert($insertData);
$key = '12345';
$search = 'Nu%';
$results = DB::table('users')
->whereRaw("AES_DECRYPT(name, ?) LIKE ?", [$key, $search])
->get();
gibi bir şey olabilir ama
- Her satırda şifre çözülmesi gerekeceği için index scan mümkün değil.
- Decrypt işleminin CPU kullanımı üzerinde etkisi olacaktır.
- 1 ve 2. madde sebebiyle kayıt sayısı arttıkça yavaşlamayı hissedeceksiniz.
- Key kaybolursa veri gider. Bu veriler kullanıcı şifresi gibi eskisi bilinmese de bir şekilde yerine yenisi konabilecek veriler değiller.
- Key değişirse tüm veriyi eski key ile açıp yeni key ile tekrar şifrelemeniz gerekir.
Bence mantıklı değil.
- Düzenlendi
nuri60 Ne yazık ki şifreli veri üzerinde arama gibi işlemler yapamazsınız. Sadece WHERE ŞİFRELE(değer) = şifreli_değer
şeklinde eşitlik işlemi yapabilirsiniz. Burada bcrypt gibi her seferinde hash değiştiren bir algoritma da kullanamazsınız. Eğer derdiniz biri veri tabanımı eli geçirirse önemli bilgilere ulaşmasın ise arama gibi işlemlerden vazgeçmeniz lazım. Eğer dediğiniz gibi bir yol olsaydı veri sızması denen bir olay da olmazdı, herkes her şeyi şifreli tutardı...