Bu makalemizde MacTribleDES ten bahsedeceğim.Ancak ismi sizi yanıltmasın,ne kadar TrebleDES desek te hash algoritmasından türetilmis bir KeyedHash algoritmasıdır.

         MacTrebleDES  mesaj doğrulama kodu oluşturmak üzere türetilmiştir.Mesajı gönderen pc ile alan pc aynı anahtarı kullanırsa ve mac adresleri doğrularsa mesaj iletilmiş olur.Yane mesajı gönderen ve alan kişi için ortak bir anahtar mantığı üzerine oturtulmuş bir algoritmadır.
         İşte .Net Framework üzerindeki bu sınfta bu doğrulama kodlarının oluşturulması,adreslenmesi ve anahtarlanması  için türetilmiş bir sınıftır.

        .Net Framework üzerinde MacTribleDES  rgbkey  olarak tanımlanan  8 byte,16 byte ve 24 byte lık anahtar uzunluklarını oluşturur.Türettiği hash değeri ise 8 byte dır.

.Net Platformu üzerinde ;

System. Object 
System.Security.Cryptography.HashAlgorithm
System.Security.Cryptography.KeyedHashAlgorithm 

Namespace lerini   takip eder.

Tanımlanma blokları aşağıdadır. 

 

VB
Public Class MACTripleDES
   Inherits KeyedHashAlgorithm
C#
public class MACTripleDES : KeyedHashAlgorithm

C++
public __gc class MACTripleDES : public KeyedHashAlgorithm
 
 
Yine üç ayrı dil bakımından oluşturma aşamasındaki  birer küçük kod bloklarıyla devam edelim.  
 
VB
Dim data(DATA_SIZE) As Byte
Dim key(24) As Byte
       
Dim mac3des As New MACTripleDES(key)
       
Dim result As Byte() = mac3des.ComputeHash(data)
 
C#
byte[] data = new byte[DATA_SIZE];
byte[] key = new byte[24];
 
MACTripleDES mac3des = new MACTripleDES(key);
 
byte[] result = mac3des.ComputeHash(data);
 
 
C++
Byte data[] = new Byte[DATA_SIZE];
Byte key[] = new Byte[24];
 
MACTripleDES* mac3des = new MACTripleDES(key);
 
Byte result[] = mac3des->ComputeHash(data);
 
 
 

Konsept bir örnekle devam edelim…… 

 

 Örn:

 
{
        
        private TripleDES alg;
        private CryptoStream stream;
        private byte[] block;
 
        
        public MACTripleDES()
        {
        HashSizeValue = 64;
        KeyValue = new byte [24];
       CryptoMethods.GenerateRandom(KeyValue, 0, 24);
              SetupAlgorithm(CryptoConfig.TripleDESDefault);
                       }
        public MACTripleDES(byte[] rgbKey)
                       {
                               HashSizeValue = 64;
                               if(rgbKey == null)
                               {
                                      throw new ArgumentNullException("rgbKey");
                               }
                               KeyValue = rgbKey;
                               SetupAlgorithm(CryptoConfig.TripleDESDefault);
                       }
        public MACTripleDES(String strTripleDES, byte[] rgbKey)
                       {
                               HashSizeValue = 64;
                               if(rgbKey == null)
                               {
                                      throw new ArgumentNullException("rgbKey");
                               }
                               KeyValue = rgbKey;
                               SetupAlgorithm(strTripleDES);
                       }
 
        
        ~MACTripleDES()
                       {
                               Dispose(false);
                       }

 

 Tam mantığını oturtmak için çok güzel bir örnekti.Şimdi  herşeyin oturması için  bir uygulamaya daha bakalım. 

Uyg: 

using System.IO;
using System.Text;
using System.Collections;
using System.Security.Cryptography;
 
namespace csMACTripleDES

 ………………….
…………………  
………….
…….
……
  

private static void EncodeNothing()
        {
            MACTripleDES macTriple = new MACTripleDES();
 
            macTriple.Initialize();
 
            byte[] key = new byte[24];
            RandomNumberGenerator.Create().GetBytes(key);
            macTriple.Key = key;
 
            macTriple.ComputeHash(new byte[1024]);
            SummarizeMAC(macTriple, "MACTripleDES after initialization.");
        }
 
        
        private static void EncodeStream()
        {
            byte[] keyData = new byte[24];
            RandomNumberGenerator.Create().GetBytes(keyData);
            MACTripleDES macTriple = new MACTripleDES(keyData);
 
            string filePath = (System.IO.Directory.GetCurrentDirectory() +
                "\\members.txt");
            try
            {
                FileStream fileStream =
                    new FileStream(filePath, FileMode.Open, FileAccess.Read);
 
                macTriple.ComputeHash(fileStream);
 
                SummarizeMAC(macTriple, 
                    "MACTripleDES after encoding a file stream.");
            }
            catch (FileNotFoundException ex)
            {
                Console.WriteLine("Specified path was not found: "
                    + filePath);
            }
        }
 
        
        private static void EncodeMessage()
        {
            byte[] keyData = new byte[24];
            RandomNumberGenerator.Create().GetBytes(keyData);
            MACTripleDES macTriple = new MACTripleDES(keyData);
 
            string message = "Encoding is fun!";
            byte[] encodedMessage = 
                EncodeBytes(Encoding.ASCII.GetBytes(message));
 
            macTriple.ComputeHash(encodedMessage);
 
            SummarizeMAC(macTriple, "MACTripleDES after encoding a message.");
        }
        
        
        private static byte[] EncodeBytes(byte[] sourceBytes)
        {
            int currentPosition = 0;
            byte[] targetBytes = new byte[1024];
            int sourceByteLength = sourceBytes.Length;
 
            
            byte[] key = new byte[24];
            RandomNumberGenerator.Create().GetBytes(key);
            string tripleDesName = "System.Security.Cryptography.TripleDES";
            MACTripleDES macTriple = new MACTripleDES(tripleDesName, key);
 
            
            int inputBlockSize = macTriple.InputBlockSize;
  try
            {
………………………………………………………………………………………
 
Son Söz
 
.Net Security üzerine güzel bir kaynak olduğunu düşünüyorum.Bu zaman kadar ki makalelerimi okuyan arkadaşlarımızın yavaş yavaş bişeyler yapmaya başladığını hissediyorum…Ancak şunu her zaman belirtmek istiyorumki hiçbir durumda tam güvenlik diye bir şey yoktur , kimse kendini zorlamasın.Bazen alt ve üst limitlerini bilmekte her zaman için fayda vardır!!!  
 
 
 Bir sonraki makalemde görüşmek ümidi  ile ……….Mutlu Günler Dilerim……