Forum

AES256 C# SİMETRİK ...
 
Bildirimler
Hepsini Temizle

AES256 C# SİMETRİK KEY HATASI!!

2 Yazılar
2 Üyeler
0 Likes
573 Görüntüleme
(@burakcelik)
Gönderiler: 1
New Member
Konu başlatıcı
 

Arkadaşlar merhaba;
AES256 şifreleme algoritması kullanarak yapılan
bir projem var.Sorun şu ki şifreleme yaptıgımda ve şifrelemeyi
çözdüğümde kullandığım şifre aynı olmalı fakat şifre çözme işleminde
kullandığım farklı bir password ilede şifre çözme işlemini
gerçekleştiriliyor.Bunu nasıl önleyebilirim?
MESELA ;
dosya seç-->encrypt-->password(1234)
dosya seç-->decrypt-->password(ASDFG)
bu şekilde decrypt yapılabiliyor.her iki yönlüde aynı şifreyi(symmetric key) kullanmak için ne yapmalıyım.
ENCRYPT VE DECRYPT FUNCTIONS AŞAGADADIR!

private Boolean Encrypt(string cOpenFile, string cSaveFile, string cPassword)
        {
            //check param
            if (("" == cOpenFile) ||
                ("" == cSaveFile) ||
                ("" == cPassword))
            {
                return false;
            }

            if (false == File.Exists(cOpenFile))
            {
                return false;
            }

            while (true == File.Exists(cSaveFile))
            {
                cSaveFile = Rename(cSaveFile);
            }

            byte[] plainText = new byte[MAX_BLOCK_LENGTH];
            byte[] cipherText = new byte[MAX_BLOCK_LENGTH];
            byte[] bzkey = new byte[MAX_KEY_LENGTH];

            //get password
            bzkey = Encoding.Unicode.GetBytes(cPassword);

            //get bytes from file
            FileStream fileStream = new FileStream(cOpenFile, FileMode.Open);
            fileStream.Seek(0, SeekOrigin.Begin);

            //get the file stream for save
            FileStream saveStream = new FileStream(cSaveFile, FileMode.Append);

            //set length of the file
            long lFileLength = fileStream.Length;
            //set position of the file
            long lPostion = fileStream.Position;

            //Read byte and Encrypt
            while (lPostion < lFileLength)
            {
                //Initialize  the buffer
                Initialize(plainText, MAX_BLOCK_LENGTH);

                long lHasRead = fileStream.Read(plainText, 0, MAX_BLOCK_LENGTH);
                if (0 >= lHasRead)
                {
                    break;
                }
                //set current cursor position
                lPostion = fileStream.Position;

                //Encrypt
                Aes aes = new Aes(ekeySize, bzkey, eblockSize);

                //Initialize  the buffer
                Initialize(cipherText, MAX_BLOCK_LENGTH);

                aes.Cipher(plainText, cipherText);
                saveStream.Write(cipherText, 0, MAX_BLOCK_LENGTH);
            }

            saveStream.Close();
            fileStream.Close();
            return true;
        }

********DECRYPT*********

private Boolean Decrypt(string cOpenFile, string cSaveFile, string cPassword)
        {
            //check param
            if (("" == cOpenFile) ||
                ("" == cSaveFile) ||
                ("" == cPassword))
            {
                return false;
            }

            if (0 > cOpenFile.LastIndexOf(".aes"))
            {
                return false;
            }

            if (false == File.Exists(cOpenFile))
            {
                return false;
            }

            while (true == File.Exists(cSaveFile))
            {
                cSaveFile = Rename(cSaveFile);
            }

            byte[] plainText = new byte[MAX_BLOCK_LENGTH];
            byte[] cipherText = new byte[MAX_BLOCK_LENGTH];
            byte[] bzkey = new byte[MAX_KEY_LENGTH];

            //get password
            bzkey = Encoding.Unicode.GetBytes(cPassword);
    
            //get bytes from file
            FileStream fileStream = new FileStream(cOpenFile, FileMode.Open);
            fileStream.Seek(0, SeekOrigin.Begin);

            //get the file stream for save
            FileStream saveStream = new FileStream(cSaveFile, FileMode.Append);

            //set length of the file
            long lFileLength = fileStream.Length;
            //set position of the file
            long lPostion = fileStream.Position;

            //Read byte and Decrypt
            while (lPostion < lFileLength)
            {
                //Initialize  the buffer
                Initialize(plainText, MAX_BLOCK_LENGTH);

                long lHasRead = fileStream.Read(plainText, 0, MAX_BLOCK_LENGTH);
                if (0 >= lHasRead)
                {
                    break;
                }
                //set current cursor position
                lPostion = fileStream.Position;

                //Encrypt
                Aes aes = new Aes(ekeySize, bzkey, eblockSize);

                //Initialize  the buffer
                Initialize(cipherText, MAX_BLOCK_LENGTH);
                //Decrypt
                aes.InvCipher(plainText, cipherText);
                saveStream.Write(cipherText, 0, MAX_BLOCK_LENGTH);
            }
           
          
            saveStream.Close();
            fileStream.Close();

            return true;
        }

 
Gönderildi : 26/05/2012 02:38

(@YavuzKIVANC)
Gönderiler: 32
Eminent Member
 

Merhaba,
AES simetrik key kullanan bir algoritma, farklı bir key ile decrypt edememen gerekir. Muhtemelen kodda hata var, ancak tüm fonksiyonlar olmadığı için net birşey söyleyemiyorum. Google da aradığında bu konuda pek çok örnek bulabilirsin, bu linkten de feyz alabilirsin.

 
Gönderildi : 29/05/2012 13:18

Paylaş: