Arşiv

Etiketlenen yazılar encoding

C# MD5 yöntemi ile metin şifreleme

14 Ağustos 2011 Yorum yapılmamış

Aşağıdaki küçük fonksiyon yardımıyla string tipindeki değişkenlerin içeriğini MD5 yöntemi ile şifreleyebiliriz.

Öncelikle kodumuzun using kısmına System.Security.Cryptography namespace‘ini eklememiz lazım.

Böylece MD5CryptoServiceProvider sınıfından yeni bir örnek (instance) oluşturabilir, ve şifreleme sağlayıcısı (crypto service provider) olarak kullanabiliriz.

using System.Text;
using System.Security.Cryptography;

public static string Sifrele(string Metin)
{
	MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

	byte[] ba = Encoding.UTF8.GetBytes(Metin);
	ba = md5.ComputeHash(ba);

	StringBuilder sb = new StringBuilder();
	foreach (byte b in ba)
	{
		sb.Append(b.ToString("x2").ToLower());
	}

	return sb.ToString();
}

Dosyanın UTF8 Formatında Olduğunu Belirleme

30 Ocak 2010 Yorum yapılmamış

BilgeAdam‘da bir öğrencimin sorusu üzerine, bir dosyanın UTF8 formatında olup olmadığını belirlemek için programatik yollar düşünmeye başlamıştım.

System.Text namespace’inde bulunan Encoding class‘ını incelerken şöyle bir yol buldum;

public static bool IsUtf8(string DosyaAdi)
{
	using (var Dosya = File.Open(DosyaAdi, FileMode.Open))
	{
		byte[] pre = Encoding.UTF8.GetPreamble();
		var b = new byte[pre.Length];
		Dosya.Read(b, 0, b.Length);
		return b.SequenceEqual(pre);
	}
}

Sadece dosyanın UTF8 olduğunu kontrol etmek için biraz hantal bir yol gibi gözüküyor değil mi?

Daha iyi bir yöntem öneriniz varsa, yorumlarınızı bekliyorum.

String tipinde değişkenin hafızada kapladığı alan

15 Ocak 2010 Yorum yapılmamış

Hangi .Net yazılımcısına sorsanız, string tipinde değişkenin hafızada kapladığı yeri hesaplamak için, karakter sayısını 2 ile çarpmak gerektiğini söyler (UTF-8 kodlama).

Genel olarak kabul gören bu hesaplama yöntemi, birçok durumda gerçeğe çok yakın sonuç üretir. Fakat sonuç tam olarak doğru değildir.

UTF-8 (Unicode Transformation Format) hakkında daha fazla bilgiyi Wikipedia‘da yeralan şu makale‘den edinebilirsiniz.

Peki string değişkenin hafızada kapladığı alanı tam olarak nasıl hesaplayacağız?

string OrnekString = "ἄλφα βῆτα γάμμα δέλτα deneme test";
MessageBox.Show("Uzunluk * 2: " + OrnekString.Length * 2 + " Byte");
MessageBox.Show("Gerçek uzunluk: " + Encoding.UTF8.GetByteCount(OrnekString).ToString() + " Byte");

OrnekString.Length * 2: 66 Byte değerini üretirken,

Encoding.UTF8.GetByteCount(OrnekString): 53 Byte değerini üretmiştir.

String değişkenlerin hafızada kapladığı alanı tam olarak hesaplamanız gerektiği durumlarda, Encoding.UTF8.GetByteCount() fonksiyonunu kullanmanızı öneririm.