AES key Regex

Başlatan Gökhan BEKEN, 15 Ocak 2016, 10:49:39

Gökhan BEKEN

Aes anahtarının düzgün girildiğini anlamam için regex ile validation yapmam lazım. Veriler hexadecimal sayıların string olarak yazılmış hali olacak ve virgül ile ayrılmış olacak. Regex ile nasıl ifade edebilirim?
Örnek string:
00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE,FF

Aslında kurallar basit:
1-string içinde virgül, 0-9 arası ve A-F arasından başka bir karakter bulunmamalı.
2-virgüller iki karakterde bir gelmeli.
3-Toplam 47 karakter olmalı, az veya fazla olmamalı.
Özel mesaj okumuyorum, lütfen göndermeyin.

Burak B

#1
Yanlış girilse ne oluyor ki ? :)

https://regex101.com/ <- Burayı bir dene
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

Gökhan BEKEN

Bir zararı yok gibi, gelen veriyi bu anahtara göre canlı olarak açıyorum, kullanıcı doğru girmemişse(doğru girdiğini sanıyorsa), hata almadığı için hatasının farkına varmıyor.
Veri sayısını ve virgül sayısını saydırarak bir kontrol yaptım ama virgül'ün yeri felan da gerekiyor. Tek tek yapacağıma regex ile tek seferde yapayım dedim.
Özel mesaj okumuyorum, lütfen göndermeyin.

JKramer

([0-9A-F]{2},){15}[0-9A-F]{2}

Gökhan BEKEN

#4
Alıntı yapılan: JKramer - 15 Ocak 2016, 11:04:37
([0-9A-F]{2},){15}[0-9A-F]{2}

Teşekkürler hocam ama eksik var sanırım
function ValidateAesKey(key) {

	if (/([0-9A-F]{2},){15}[0-9A-F]{2}/.test(key))
	{
		alert("HATA: AES key doğrulanmadı");
		return (0)
	}
	alert("AES doğrulandı");
	return (1);	
}
ValidateAesKey("00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE,FF"); //doğrulanmadı
ValidateAesKey("00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE"); //doğrulandı
ValidateAesKey("00,11,22,33,44,55,66,77,88,99,AA,BB,CC,6asRaaaaaaC");  //doğrulanmadı
Özel mesaj okumuyorum, lütfen göndermeyin.

JKramer

Ben Code::Blocks içindeki Regular Expressions testbed plugini ile yapmıştım, şimdi de http://regexr.com/ adresinden kontrol ettim doğru görünüyor.

Verdiğiniz bilgiye göre {15} kısmını {16} yaparsanız olacak gibi ama nedeni konusunda bir fikrim yok.

Gökhan BEKEN

#6
16 yaptığımda hepsini doğruluyor :)

Neyse regex'e hala alışamadığımdan eski usül yaptım.

<script type="text/javascript" language="JavaScript">
		function ValidateAesKey(key) {
			if(47!=key.length){
				alert("Eksik veya fazla veri girdiniz.");
				return 1;
			}
			var index=0;
			for (index = 0; index < key.length; index  ) {
				var karakter = key.charAt(index);
				var char_say=0;
				char_say = karakter.charCodeAt();
				
				if( ((index 1)%3) ==0){ //virgül olmaması gereken yer
					if ( char_say != 44 ){ //virgül koymayı unutmuş mu
						alert("virgül hatası");
						return(1);
					}
				}
				else{
					if (  (97 <= char_say) && (char_say <= 102) ){ // a-f
					}
					else if (  (65 <= char_say) && (char_say <= 70) ){ // A-F
					}
					else if (  ((0 48) <= char_say) && (char_say <= (9 48)) ){ //0-9
					}	
					else {
						if ( char_say == 44 ){//virgül olmaması gereken yerlerde virgül var mı?
							alert("virgül hatası 2");
							return(1);
						}
						else{
							alert("[A-Z] [a-z] [0-9] [,] işaretleri dışında karakter kullanmayınız!");
						}
						return(1);
					}
				}
			}
			return 0;
		}		

		ValidateAesKey("A8,25,5B,D6,58,0D,B9,98,FD,21,77,78,B0,6D,71,3C");
		ValidateAesKey("A8,25,5B,D6,58,0D,B9,98,FD,21,77,78,B0,6D,713,C");
		ValidateAesKey("A8,25,5B,D6,58,0D,B9,98,FD,21,77,78,B0,%asRaaaa");
	</script>




Bu arada bir şey farkettim @gevv hocam ,   işaretleri code tagına alınınca çıkmıyor sanırım.
Özel mesaj okumuyorum, lütfen göndermeyin.