1. sayfa
|
bence hashsaltı gözden kaçırıyorsun. nasıl yaptıgını paylaşırsan (hashed datayı nasıl yarattıgını) yardım edebilirim. veya daha açık bir şekilde nd yapmaya çalıştıgını |
|
Olayın özü şu Asp.net ile ürettiğim FormsAuthentication.HashPasswordForStoringInConfigFile() şu sha1 ile hashlenmiş string verinin aynısını windows form tarafında da üretmek. Kalan detaylar önemli değil. Windows formda ürettiğim sha1 binary olarak üretildiği için farklı bir string ortaya çıkıyor. Bu yüzden iki veri birbiriyle eşleşmiyor. Atıyorum FormsAuthentication.HashPasswordForStoringInConfigFile() ile ürettiğim TrueBlack = abcd12345 ise Windows form ile ürettiğim TrueBlack = vcxz567= oluyor. Yani olayın özü FormsAuthentication.HashPasswordForStoringInConfigFile() = windows formsda nedir ? |
|
tekrar selamlar, genelde hashed salt machine keye göre veya random üretildiği için her seferinde farklı sonuclar doğurması muhtemel. farklı parolalar ile login oldugunda bile salt ddeğişebildiği (değişmiyora zaten güvenlik açığıdır) için farklı bir hashedpassword elde edebilirsin. bunun için geridönüşümlü şifreleme (mesela RC4) kullanabilirsin, boylece şifrelenmiş veri için ortak key kullanarak şifreyi decrypt edebilirsin. ama sha1 kullanarak şifrelemek istiyorsan , ben FormsAuthentication.HashPasswordForStoringInConfigFile() kullanmak yerine databasede hashedpassword ve salt tutuyorum. böylce kullanıcı dışında databaseye bakan bile kullanıcının şifresini anlayamıyor. bunu direk kullanıcıyı kaydederken yapıyorum. kaydederken random birşey üretiyorum. bu kullanıcının saltı oluyor. birde password oluşturuyorum. bu da kullanıcının passwordu ve ürettiğim saltın hashlanmıs versiyonu oluyor. böylece kullanıcı login ederken , kullanıcı parolasını giriyor , ben kullanıcının saltını alıyorum ve kullanıcının girdiği parola ile hashliyorum benım databasemdeki hashedpassword e denk geliyor ise, login tamamdır diyorum. mesela bu benim kullanıcıyı kayıt ederken kullandıgım method,
bu da login ettiğim method
böylece salt , bilgisayara veya anlık machinekye göre veyahutta sessiona veyahutta bunun gibi bilgisayara veya ana bağlı değişkenler ile ilişkili olmadığından gerekli güvenliği sağlıyorum. saltı sabit tutmanın bir methodunu bulabilirsen (ki ben databaseye yazıyorum) forms da web tarafı da aynı hashedpasswordu üretecektir. |
| Demek istediğim bu değil aslında. Şimdi uygulama hem web tarafından hem windows app.dan erişilebilecek. Ama şifreler sha1 ile web tarafından üretilip veri tabanına kayıt edilmiş halde. (FormsAuthentication.HashPasswordForStoringInConfigFile() ile üretilen sha1) Veri tabanında yüzlerce kullanıcı var. Şimdi bu kullanıcıların şifrelerini doğrulayabilmesi için aynı sha1 kodunu üretmesi lazım ki kullanıcı login olabilsin. Olay sadece bu şifre nasıl üretildi vs vs konusu değil mevzu. Mevzu aynı sha1 kodunu webde FormsAuthentication.HashPasswordForStoringInConfigFile() ile üretilen kodun aynısını üretim doğrulamayı yapmak. Uygulama sadece windows olsa yada sadece web olsa sorun yok zaten. Ayrıca daha önce üretilmiş bir şifreleme metodu var ve bununla login olan yüzlerce kullanıcı var. |
|
tamamdır o zaan şöyle sorayım bu işi webconfigde yaptıgın için , web configinde tanımlı machine keyin var mı ? (yani değişmeyen bir keyin) var ise şayet tanımlanmış ise, haliyle web form da bu keye göre veriyi şifrelediğinden , HashAlgorithm algorithm = SHA1.Create(); burada machine key section olan kısmı webconfiginden alacağın key ile hardcoded gömüp kullanabilirsin. çok büyük olasılıkla aynı değeri verecektir. webconfiginde tanımlanmış sabit bir machine key yok ise şayet , yapacak birşey yok. |
Aynen öyle, ne yazıkki öyle bir machine key yok. Ama çok saçma bir durum. Bakalım bulacaz bir çözüm. |
| bence machine key static olarak tanımlanmamış ise bunu oğrenmenin yollarını bir araştır derim. machine key çok uzun birşey yoksa deneme yanılma ile bulunabilir :) |
1. sayfa
FormsAuthentication.HashPasswordForStoringInConfigFile() ile ürettirdiğim string veriye eşit SHA1 şifreyi windows formda nasıl ürettiririm.
Bunun için using System.Security.Cryptography; de aramadığım şey kalmadı. Ama string olarak webde ürettiğim SHA1 şifrenin aynısını windows formda ürettiremedim. Birşeyleri gözden kaçırıyorum ama neyi kaçırıyorum anlayamadım. Varsa bu tip bir işlemi daha önce yapan bir el atsın.
Not: Ayrıca windows form uygulamaları için bir alt forum olmadığını da yeni fark ediyorum.