Bir önceki yazımda üreteçleri anlatmıştım. Bu yazımda ise bir uygulama olarak rastgele şifre üreten bir program nasıl yazılabilir, onu anlatmaya çalışacağım. Rastgele değerler üretmek için numpy kütüphanesini kullanacağım.
Programı kısaca anlatmak gerekirse, önce harfler, sayılar ve özel karakterlerden oluşan bir liste oluşturacağım, sonra ise bu listeyi kullanarak rastgele bir şifre üreteceğim. Haydi başlayalım.
1 2 3 4 5 |
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. Bir önceki yazıda yield’i anlattığım için bu kod parçasında “ord()” ve “chr()” komutunu anlatmaya değer buluyorum. 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.
1 2 3 4 5 6 7 8 9 10 |
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 dedim. 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şturdum. Sonrasında ilk kod parçasında oluşturduğum fonksiyon ile ürettiğim üreteci kullanarak, a’dan z’ye tüm harfleri (hem büyük, hem küçük harfleri) karakterler isimli listeme ekliyorum. Son olarak da, karakterler listesine sayı ve özel isimli listeleri ekliyorum. Karakerler isimli listeyi ekran bastığımızda sonuç şöyle olacaktır;
1 |
['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, '*', '.', '_', '-'] |
1 2 3 4 5 6 7 8 9 10 |
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şturdum. Döngümüz başta belirlediğimiz şifre uzunluğu kadar dönüyor ve her dönüşte karakterler listemizden bir elemanı sifre 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 sifre listesine ekleniyor. Programın tam hali aşağıdaki gibidir;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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 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 |
1 2 3 |
bz.FI9FDVqj9WCL oN*9raDZlmimdNF qz-xd1dT6Jjy.Ny |
Çok sağol