Güvenli Şifre Oluşturan Program Yazmak | Python

Thessaloniki

Yeni üye
17 Haz 2019
9
0
Selanik
Programı kısaca anlatmak gerekirse, önce harfler, sayılar ve özel karakterlerden oluşan bir liste oluşturacağız, sonra ise bu listeyi kullanarak rastgele bir şifre üreteceğiz.

Kod:
import numpy as np
 
def char_range(c1, c2):
    for c in xrange(ord(c1), ord(c2)+1):
        yield chr(c)

İlk satırda numpy kütüphanesini import ettik. Daha sonra yazdığım fonksiyon ise, verilen iki karakter arasındaki karakterleri üreten bir üreteç döndürüyor. Ord komutu içine boyutu 1 olan bir string alır ve bu string’in unicode değerini bize verir. Örnekleyelim; deneme=ord(“a”) şeklinde bir kod yazıp, print deneme ile deneme değişkenini ekrana yazdırırsak, program ekrana 97 değerini basacaktır. 97 “a” harfinin unicode değeridir. Chr komutu iste tam tersini yapacaktır; chr(97) bize “a” değerini döndürecektir. Yani fonksiyonumuz c1 ve c2 arasındaki tüm karakterlerin unicode değerleri ile bir üreteç oluşturacak. Devam edelim; şifre uzunluğumuzu programa verip listemizi oluşturalım.

Kod:
sifre_uzunlugu=15
 
sayi=list(xrange(10))
ozel=["*",".","_","-"]
karakterler=[]
 
for harf in char_range('a', 'z'):
    karakterler.append(harf)
    karakterler.append(harf.upper())
karakterler+=sayi+ozel

Burada ise 15 karakter uzunluğunda bir şifre olsun dedik. Peşinden 0 ile 9 arası sayılar bulunan sayı listesini ve içinde benim seçtiğim özel karakterlerin bulunduğu ozel isimli listeyi oluşturduk. Sonrasında ilk kod parçasında oluşturduğumuz fonksiyon ile ürettiğimiz üreteci kullanarak, a’dan z’ye tüm harfleri (hem büyük, hem küçük harfleri) karakterler isimli listeme ekliyoruz. Son olarak da, karakterler listesine sayı ve özel isimli listeleri ekliyoruz. Karakterler isimli listeyi ekran bastığımızda sonuç şöyle olacaktır;

Kod:
['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'o', 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '*', '.', '_', '-', '!', '^', '+', '%', '&', '/', '(', ')', '=', '?', '_', '#', '$', '{', '}', '[', ']', ':', ';', '~', '<', '|', '>']

Tüm karakterlerimizi tek bir listede topladık. Buradan sonra ise, bu listeden rastgele elemanlar seçip şifremizi oluşturacağız.

Kod:
sifre=[]
sonuc=""
 
for i in range(sifre_uzunlugu):
	eklenecek_eleman=np.random.uniform(0,len(karakterler))
	eklenecek_eleman=int(eklenecek_eleman)
	sifre.append(karakterler[eklenecek_eleman])
	sonuc+=str(sifre[i])
 
print sonuc

Önce rastgele 15 elemanı tutacak bir boş liste ve onun birleştirilmiş halini tutacak boş bir string oluşturduk. Döngümüz başta belirlediğimiz şifre uzunluğu kadar dönüyor ve her dönüşte karakterler listemizden bir elemanı şifre isimli listeye ekliyor. Döngüde np.random.uniform(0,len(karakterler)) komutu 0 ile karakterler listesinin boyutu arasında rastgele bir sayı oluşturuluyor, daha sonra eklenecek_eleman=int(eklenecek_eleman) komutu bu rastgele sayıyı tam sayıya çeviriliyor ve son olarak sifre.append(karakterler[eklenecek_eleman]) komutuyla karakterler isimli listemizden oluşturduğumuz rastgele sayı numaralı eleman şifre listesine ekleniyor.

Programın tam halinin kodları aşağıdaki gibidir.

Kod:
import numpy as np
 
def char_range(c1, c2):
    for c in xrange(ord(c1), ord(c2)+1):
        yield chr(c)
 
sifre_uzunlugu=15
 
sayi=list(xrange(10))
ozel=["*",".","_","-"]
karakterler=[]
 
for harf in char_range('a', 'z'):
    karakterler.append(harf)
    karakterler.append(harf.upper())
karakterler+=sayi+ozel

['a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'o', 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '*', '.', '_', '-', '!', '^', '+', '%', '&', '/', '(', ')', '=', '?', '_', '#', '$', '{', '}', '[', ']', ':', ';', '~', '<', '|', '>']
 
sifre=[]
sonuc=""
 
for i in range(sifre_uzunlugu):
	eklenecek_eleman=np.random.uniform(0,len(karakterler))
	eklenecek_eleman=int(eklenecek_eleman)
	sifre.append(karakterler[eklenecek_eleman])
	sonuc+=str(sifre[i])
 
print sonuc

Böylece basit ve kullanışlı bir güvenli şifre üreticisi geliştirmiş olduk. Herkes bu kodları deneyip geliştirebilir.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.