Forum
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;
}
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.