Tekrar hoş geldiniz.
Parola API'sini ve bu API'nin kimseye güvenmememizi nasıl sağladığını öğrendik.
Yani, sadece kendimize güveniyoruz ve API'ye sadece kendimizi rahat hissettiğimiz bilgi parçalarını
vereceğiz, böylece API bize daha sonra varsayımsal olarak daha güvenli olan kendi makinelerimizde hesaplayabileceğimiz
bazı veriler içeren bir yanıt verecek.
Burada yaptığımız şey, şifremizin tüm karmasını vermek yerine, sadece bir kısmını vermektir.
İlk beş karakter, şu anda veritabanlarında ve web sitelerinde 600 milyona yakın parola var.
Şimdi belki sadece benzer bir başlangıç karmasına sahip birkaç yüz kişinin bir parçası olduğumuzu biliyor, ancak
şifremizi asla bilmeyecekler.
Ancak bu yanıt verileriyle, artık parolanın daha önce ertelenip ertelenmediğini veya daha önce hacklenip hacklenmediğini görmek için tam hash'imizi
kontrol edebiliriz.
Şimdi programımızı yazmaya başlayalım, çünkü ideal olarak bu yanıtta, kontrol edebileceğim bu hash'lerden
oluşan belki birkaç yüz listeye sahibim.
Ne yapmak istediğimizi düşünelim.
Yani ideal olarak, diyelim ki bir fonksiyonumuz var ve bu fonksiyon istek olacak.
API.
Veriler, burada yaptığımız da bu.
Hazır olduğumuzda bunu buraya taşıyacağız ve burada sorgu karakterlerini vereceğiz.
Yani şifremizin bu karma versiyonunu vereceğiz.
Yani bu şimdilik sadece geçeceğimiz bir fonksiyon olacak.
Ancak bu, verilerimizi talep edecek ve bize bir yanıt verecek.
Daha sonra bu yanıtla, aslında kontrol etmek istiyoruz, böylece pwned API kontrolünü kontrol etmek istediğimizi söyleyebiliriz
ve burada şifremizi vereceğiz.
Yani bizim durumumuzda gerçek şifremiz password olacaktır.
Bir, iki, üç.
Ve burada bir çeşit kontrol yapmak istiyoruz.
Çek demek istiyoruz.
Şifre.
API'de mevcutsa.
Cevap ver.
Buradan.
O yüzden şimdilik bunu geçiyoruz.
O zaman birincisi üzerinde çalışalım.
Bu istek API verileridir.
Bunun bir kısmını zaten burada yaptık.
Doğru.
Aslında bu kodu taşıyacağım.
Buraya.
Şimdi bu güç yerine dolgunun burada olduğundan emin olun.
Aslında dinamik olması için fonksiyon genişliğini çağıracağımız sorgu karakterini vereceğim.
Ve yine, URL'yi talep edeceğiz, yanıtı alacağız.
Ve burada bir kontrol yapacağız.
If response dot status diyeceğiz çünkü hatırlayın, status 200 ise ya da bu durumda status 200'e eşit değilse
yanıtımızı kontrol edebiliriz.
Bu durumda, sadece bir hata oluşturalım.
Bu yüzden yükselt diyeceğim, bir çalışma zamanı hatası yapacağız ve diyeceğiz ki, bir F dizesi kullanalım ve diyeceğiz ki.
Hava.
Getiriyorum.
Ve sonra yanıt durumu olması için ona durum kodu vereceğiz.
Oh, ve aslında bu durum kodu.
Burada sadece durum kodunu yazalım ve sonra kontrol et diyelim.
API ve tekrar deneyin.
Pekala, eğer bir hata yaparsak bu bizim hatamız olmalı.
Bunu bir test edelim.
Ben gidiyorum.
Var olmayan bir API yapalım.
O yüzden burada saçma sapan şeyler yazıyorum.
Eğer bunu kaydedip çalıştırırsam.
Bu kod parçasını gerçekten çalıştırmam gerekiyor.
Şimdi API verilerini isteyelim ve sorgu karakteri şöyle olacak.
Bir, iki, üç.
Ve ne var biliyor musun?
Bunu yapsam da yapmasam da bu yayınlanacak.
Bunu yapalım çünkü bu Hatch versiyonu değil.
Ve aslında bir python hatası alıyorum type here can only concatenate string not int.
Bu yüzden bunu bir dizeye dönüştürebiliriz çünkü burada URL'ye eklediğimizi unutmayın.
Bunu tekrar çalıştırırsak.
Pekala, şuna bak.
Bir çalışma zamanı hatası aldık.
Çalışma zamanı hatası alıyoruz.
400 alınırken hata oluştu.
API'yi kontrol edin ve tekrar deneyin.
Tamam, bu kısım çalışıyor, ancak bu durumda, bu hatayı almazsak, yalnızca yanıtı
döndüreceğimizi söyleyelim.
Yine, sadece küçük, basit fonksiyonlar yazıyoruz.
Bu durumda, sadece istek API verilerimizi istiyoruz, böylece artık kodumuz boyunca kullanabiliriz.
Harika.
Şimdi, bir sonraki kısım biraz zor çünkü şifremizi SHA one algoritmasından geçirmemiz gerekiyor.
Neyse ki Python bunu yapabilmemiz için yerleşik bir modüle sahiptir, böylece aslında import hash lib yapabiliriz.
Gördüğünüz gibi, yerleşik bir modüldür, bu nedenle isterseniz daha fazla bilgi edinebilirsiniz.
Bizim durumumuzda, bu kütüphane ile web sitesinde yaptığımız gibi SHA1 hashing yapabiliyoruz.
Burada.
Yapacağımız şey, her şeyden önce, parolamı hash edebilmek istiyorum.
Öyleyse buradaki geçmişi kaldıralım ve sha one şifresi diyelim ve kullanmak istediğimiz hash algoritması olan bu
hash lib dot SHA one gibi hash lib'i kullanabiliriz.
Ve bu biraz zor olacak, ancak belgeleri okuyabilirsiniz.
Sadece nasıl yapılacağını göstereceğim.
Bizim durumumuzda, şifre yapabiliriz ve UTF sekiz olarak kodlamak istiyoruz.
Ki bu oldukça standart.
Aslında, ne var biliyor musun?
Size bunun ne işe yaradığını göstereyim.
Bu yüzden yazdır diyeceğim ve sadece parola ve kod UTF sekiz yapacağım.
O yüzden şimdilik bunu yapalım.
Şimdilik bunu yorum olarak yazacağım.
Bu yüzden Pwned API kontrolünü çağıracağım ve bir, iki, üç yapacağız.
Şunu açıklığa kavuşturalım.
Bu kod parçasını kaydedip çalıştıracağım.
Tamam, kodlandı.
UTF 8'deki şu küçük B'yi görüyor musunuz?
Aslında bundan sonra ENCODE'u kaldırdığımızda ne olacağını size göstereceğim.
Daha sonra, SHA1 hash kütüphanesini kullandığımızda.
Bunu kopyalamama izin verin.
Eğer bunu çalıştırırsam.
Bir SHA1 karma nesnesi alıyorum.
Şimdi bundan sonra nokta hex özetini şu şekilde çağırabiliriz.
Ve eğer bunu çalıştırırsam.
Hmm.
Peki, bunu nasıl kontrol edebiliriz?
Hash lib'e gidebilir ve basitçe hex digest'i arayabiliriz.
Yani burada, herhangi bir noktada verilerin birleştirilmesinin özetini isteyebilirsiniz, falan,
filan, hex özeti.
Yani bu bizim için hiçbir şeyi açıklamıyor.
Bir sonraki bölüme ve bir sonraki bölüme geçelim ve işte, Hex Digest.
Yalnızca onaltılık basamaklar içeren çift uzunlukta bir dize nesnesi döndürür.
Bu sadece bu nesneyi onaltılık dizeye dönüştürmek için yapmamız gereken bir şeydir.
Bir sonraki bölüm, API ile uyumlu olması için, tüm bunları büyük harfe dönüştürmektir.
Yani burada üst yaparsam.
Ve bunu kaydedip tekrar çalıştırıyorum.
Sha 1'e baktığımızda gördüğümüz gibi her şey büyük harflerle yazılmış.
Yani bu, yine bilmenize gerçekten gerek olmayan bir şey.
Tek yapmanız gereken Google'da bunu nasıl kullanabileceğinizi araştırmak.
Şimdi size UTF sekiz ENCODE kullanmadığımızda ne olacağını göstereyim.
Yani bu şekilde yaparsam ve bunu çalıştırırsam.
Şunu görüyor musun?
Bir hata alıyorum.
Unicode nesneleri hashing işleminden önce kodlanmalıdır.
Yani aslında size güzel bir hata verir ve UTF sekiz kullanarak bu şekilde kodlayabiliriz.
Yani bu sadece standart.
Yine, çok çılgınca bir şey değil.
İsterseniz kendi başınıza kodlama ve UTF sekiz hakkında bilgi edinebilirsiniz.
Buradaki kilit nokta, sonunda gönderebileceğimiz bir SHA one şifresine sahip olmamızdır.
Tüm bunları kopyalamama izin verin.
Baskıyı kaldıracağım.
Ve burada, SHA bir şifremiz olacak.
Harika.
O yüzden şimdilik bu SHA'yı iade edelim.
Şifre.
Ve eğer bunu çalıştırırsam.
Görünüşe göre kodumuz çalışıyor.
Hiçbir şey basmıyoruz, ama umarım.
Bu sha one şifresini alıyoruz.
Şimdi bir sonraki videoda bunu API'mize göndermeyi denemek ve ne tür bir yanıt alacağımızı görmek istiyorum.
Hadi yapalım şunu.
Biraz ara ver.
Bir sonrakinde görüşürüz.