Add Encryption Option

This commit is contained in:
SilicaAndPina 2019-12-14 10:11:54 +13:00
parent ae0bd69649
commit d3164bac33
2 changed files with 147 additions and 25 deletions

View File

@ -159,8 +159,32 @@ namespace RMDEC
}
public void EncryptFile(Stream inStream, Stream outStream)
{
outStream.Seek(0x00, SeekOrigin.Begin);
outStream.SetLength(0x00);
BinaryWriter boutStream = new BinaryWriter(outStream);
string magic = "RPGMV";
byte[] magicBytes = Encoding.UTF8.GetBytes(magic);
outStream.Write(magicBytes, 0x00, magicBytes.Length);
boutStream.Write(0x00);
boutStream.Write(0x103);
outStream.Write(new byte[0x3], 0x00, 0x3);
inStream.Seek(0x00, SeekOrigin.Begin);
byte[] plaintextHeader = new byte[0x10];
inStream.Read(plaintextHeader, 0x00, 0x10);
byte[] encryptedHeader = xor(plaintextHeader, encryptionKey);
outStream.Write(encryptedHeader, 0x00, encryptedHeader.Length);
inStream.CopyTo(outStream);
}
public void DecryptFile(Stream inStream, Stream outStream)
{
inStream.Seek(0x00, SeekOrigin.Begin);
byte[] magic = new byte[0x05];
@ -177,6 +201,10 @@ namespace RMDEC
inStream.Read(encryptedHeader, 0x00, 0x10);
byte[] plaintextHeader = xor(encryptedHeader, encryptionKey);
outStream.Seek(0x00, SeekOrigin.Begin);
outStream.SetLength(0);
outStream.Write(plaintextHeader, 0x00, plaintextHeader.Length);
inStream.CopyTo(outStream);
}

View File

@ -26,6 +26,8 @@ namespace RMDEC
private List<string> encFileList = new List<string>();
private List<string> decFileList = new List<string>();
private string[] blacklistedFiles = { Path.Combine("icon","icon.png"), Path.Combine("img","system","Window.png"), Path.Combine("img","system","Loading.png") };
private bool encryptedIndexingComplete = false;
private bool unencryptedIndexingComplete = false;
private void onIndexThreadComplete()
@ -59,13 +61,13 @@ namespace RMDEC
List<string> pngList = new List<string>();
List<string> oggList = new List<string>();
List<string> M4AList = new List<string>();
List<string> m4aList = new List<string>();
foreach (string file in Directory.EnumerateFiles(mvProject.FilePath, "*", SearchOption.AllDirectories))
{
string fileExtension = Path.GetExtension(file);
string fileExtension = Path.GetExtension(file).ToLower();
switch (fileExtension)
{
@ -76,7 +78,7 @@ namespace RMDEC
oggList.Add(file);
break;
case ".rpgmvm":
M4AList.Add(file);
m4aList.Add(file);
break;
}
@ -106,14 +108,14 @@ namespace RMDEC
}
//add M4A
foreach (string M4A in M4AList)
foreach (string m4a in m4aList)
{
string relativeName = M4A.Remove(0, mvProject.FilePath.Length+1);
string relativeName = m4a.Remove(0, mvProject.FilePath.Length+1);
Invoke((Action)delegate
{
encryptedFileList.Items.Add("[M4A] " + relativeName);
});
encFileList.Add(M4A);
encFileList.Add(m4a);
}
Invoke((Action)delegate
@ -131,12 +133,18 @@ namespace RMDEC
List<string> pngList = new List<string>();
List<string> oggList = new List<string>();
List<string> M4AList = new List<string>();
List<string> m4aList = new List<string>();
foreach (string file in Directory.EnumerateFiles(mvProject.FilePath, "*", SearchOption.AllDirectories))
{
string fileExtension = Path.GetExtension(file);
string relativeName = file.Remove(0, mvProject.FilePath.Length + 1);
string fileExtension = Path.GetExtension(file).ToLower();
if(blacklistedFiles.Contains(relativeName))
{
continue;
}
switch (fileExtension)
{
@ -146,8 +154,8 @@ namespace RMDEC
case ".ogg":
oggList.Add(file);
break;
case ".M4A":
M4AList.Add(file);
case ".m4a":
m4aList.Add(file);
break;
}
@ -158,6 +166,7 @@ namespace RMDEC
foreach (string png in pngList)
{
string relativeName = png.Remove(0, mvProject.FilePath.Length+1);
Invoke((Action)delegate
{
decryptedFileList.Items.Add("[PNG] " + relativeName);
@ -169,6 +178,7 @@ namespace RMDEC
foreach (string ogg in oggList)
{
string relativeName = ogg.Remove(0, mvProject.FilePath.Length+1);
Invoke((Action)delegate
{
decryptedFileList.Items.Add("[OGG] " + relativeName);
@ -177,14 +187,15 @@ namespace RMDEC
}
//add M4A
foreach (string M4A in M4AList)
foreach (string m4a in m4aList)
{
string relativeName = M4A.Remove(0, mvProject.FilePath.Length+1);
string relativeName = m4a.Remove(0, mvProject.FilePath.Length+1);
Invoke((Action)delegate
{
decryptedFileList.Items.Add("[M4A] " + relativeName);
});
decFileList.Add(M4A);
decFileList.Add(m4a);
}
Invoke((Action)delegate
@ -205,7 +216,99 @@ namespace RMDEC
private void encryptSelected_Click(object sender, EventArgs e)
{
SelectedIndexCollection itemList = decryptedFileList.SelectedIndices;
int itemCount = itemList.Count;
if (itemCount < 1)
{
return;
}
int item = 0;
processingBar.Style = ProgressBarStyle.Continuous;
processingBar.Maximum = itemCount;
processingText.BackColor = Color.Yellow;
encryptSelected.Enabled = false;
decryptSelected.Enabled = false;
Thread decryptFilesThread = new Thread(() =>
{
int i = 1;
int total = itemCount;
do
{
Invoke((Action)delegate
{
itemCount = itemList.Count;
item = itemList[0];
processingText.Text = "Encrypting " + i.ToString() + "/" + total.ToString();
});
string decryptedFile = decFileList[item];
string extension = Path.GetExtension(decryptedFile).ToLower();
string newExtension = "";
switch (extension)
{
case ".png":
newExtension = ".rpgmvp";
break;
case ".ogg":
newExtension = ".rpgmvo";
break;
case ".m4a":
newExtension = ".rpgmvm";
break;
}
string encryptedFile = Path.ChangeExtension(decryptedFile, newExtension);
FileStream Decrypted = File.OpenRead(decryptedFile);
FileStream Encrypted = File.OpenWrite(encryptedFile);
mvProject.EncryptFile(Decrypted, Encrypted);
Encrypted.Close();
Decrypted.Close();
File.Delete(decryptedFile);
Invoke((Action)delegate
{
string entry = decryptedFileList.Items[item].ToString();
string encryptedEntry = Path.ChangeExtension(entry, newExtension);
encryptedFileList.Items.Add(encryptedEntry);
encFileList.Add(encryptedFile);
decryptedFileList.Items.RemoveAt(item);
decFileList.RemoveAt(item);
processingBar.Value = i;
});
i++;
} while (itemCount > 1);
Invoke((Action)delegate
{
encryptSelected.Enabled = true;
decryptSelected.Enabled = true;
processingText.BackColor = Color.Green;
processingText.Text = "Encrypted " + total.ToString() + " files!";
});
});
decryptFilesThread.Start();
}
private void decryptSelected_Click(object sender, EventArgs e)
@ -218,11 +321,8 @@ namespace RMDEC
return;
}
int[] selectedIndexes = new int[itemCount];
int item = 0;
itemList.CopyTo(selectedIndexes, 0);
processingBar.Style = ProgressBarStyle.Continuous;
processingBar.Maximum = itemCount;
@ -250,7 +350,7 @@ namespace RMDEC
string encryptedFile = encFileList[item];
string extension = Path.GetExtension(encryptedFile);
string extension = Path.GetExtension(encryptedFile).ToLower();
string newExtension = "";
switch (extension)
@ -286,7 +386,7 @@ namespace RMDEC
decryptedFileList.Items.Add(decryptedEntry);
decFileList.Add(decryptedFile);
encryptedFileList.Items.Remove(entry);
encryptedFileList.Items.RemoveAt(item);
encFileList.RemoveAt(item);
processingBar.Value = i;
@ -304,13 +404,7 @@ namespace RMDEC
});
});
decryptFilesThread.Start();
decryptFilesThread.Start();
}