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.
İ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 stringin 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.
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, adan zye 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;
Tüm karakterlerimizi tek bir listede topladık. Buradan sonra ise, bu listeden rastgele elemanlar seçip şifremizi oluşturacağız.
Ö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.
Böylece basit ve kullanışlı bir güvenli şifre üreticisi geliştirmiş olduk. Herkes bu kodları deneyip geliştirebilir.
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 stringin 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, adan zye 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.