Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.

Yazılım Soruları

0

Java'da şifre oluşturma ve şifrenin uygunluğunu test etme

Merhaba.

Nesne yönelimli programlama dersimle ilgili bir problemim var.

Programa girilmesi için bir şifre oluşturmak istiyorum. Daha önce oluşturduğum şifreler kullanıcının ismini, soyismini kullanarak oluşturduğum şifrelerdi. İsmin ilk iki harfini büyük harflerle, soyismin son iki harfini küçük harflerle birleştirip sonuna da ismin uzunluğunu ekliyordum. Umarım anlatabilmişimdir.

Bu kullandığım şifreleme yöntemi hiç gerçekçi değil maalesef.

Ödev programımda kullanmam gereken yöntem daha gerçekçi olmalı.

İstediğim şifre ise en az bir küçük harf, en az bir büyük harf ve en az bir sayı içermeli. Fakat bu şifreyi nasıl oluşturacağımı bilmiyorum. Kullanıcıdan girilen şifrenin büyük harf, küçük harf ve sayı içerip içermediğine bakmam gerekiyor.

Bunu kontrol edecek kodu nasıl yazabilirim?

Soran:21.12.18 20:58
misafir  

1 Cevap

0
Uzun zamandır Java ile işimiz olmuyor ama bir zamanlar şöyle bir şey kullanmıştık. Söylediğini karşılıyor.

import java.security.SecureRandom;

public class SifreUret {
    private SecureRandom random;
    private String sifre;

    private String ALPHA_CAPS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    private String ALPHA = "abcdefghijklmnopqrstuvwxyz";
    private String NUMERIC = "0123456789";

    private String karakterleriSec(int len, String dic) {
	    String result = "";
	    for (int i = 0; i < len; i++) {
	        int index = random.nextInt(dic.length());
	        result += dic.charAt(index);
	    }
	    return result;
    }
    
    private String shuffle(String s)
    {
        char c;
        StringBuffer result = new StringBuffer(s);
        int n = result.length();
        while ( n > 1 )
        {
            int pos1 = random.nextInt(n);
            int pos2 = random.nextInt(n);
            c = result.charAt(pos1);
            result.setCharAt(pos1, result.charAt(pos2));
            result.setCharAt(pos2, c);
            n--;
        }
        return result.toString();
    }
	public String getSifre() {
		return sifre;
	}
	public Boolean kontrol(String kSifre) {
		int i;
		Boolean alphaCapsVar = false;
		Boolean alphaVar = false;
		Boolean numericVar = false;
		for (i=0; i < kSifre.length(); i++)
			if (ALPHA_CAPS.indexOf(kSifre.charAt(i)) == -1) {
				alphaCapsVar = true;
				break;
			}
		for (i=0; i < kSifre.length(); i++)
			if (ALPHA.indexOf(kSifre.charAt(i)) == -1) {
				alphaVar = true;
				break;
			}
		for (i=0; i < kSifre.length(); i++)
			if (NUMERIC.indexOf(kSifre.charAt(i)) == -1) {
				numericVar = true;
				break;
			}
		return alphaCapsVar && alphaVar && numericVar;
	}
	SifreUret() {
		
	}
	SifreUret(int karakterSayisi) {
		random = new SecureRandom();
    	sifre = "";
    	sifre += karakterleriSec(random.nextInt(karakterSayisi / 3) + 1, ALPHA_CAPS);
    	sifre += karakterleriSec(random.nextInt(karakterSayisi / 3) + 1, ALPHA);
    	sifre += karakterleriSec(karakterSayisi - sifre.length(), NUMERIC);
    	sifre = shuffle(sifre);		
	}
}
Kullanımı:

Şifre üretmek için...
String sifre = new SifreUret(10).getSifre();
Şifreyi test etmek için...

Boolean gecerliMi = new SifreUret().kontrol(sifre);


Cevaplayan: 22.12.18 19:15
cevapsitesi
101,339p 10ü