Returned missing backward compatibility for decryption with custom salt.

This commit is contained in:
Alexander 2019-11-27 11:56:53 +02:00
parent 31a8838919
commit e500c95f5d
6 changed files with 53 additions and 6 deletions

View file

@ -162,6 +162,9 @@
<setting name="passwordGeneratorNumberOfStrings" serializeAs="String">
<value>10</value>
</setting>
<setting name="TheSalt" serializeAs="String">
<value />
</setting>
</Crypto_Notepad.Properties.Settings>
</userSettings>
</configuration>

View file

@ -204,16 +204,19 @@ public static async Task<string> Decrypt(string cipherText, string password, str
{
// Metadata parsing error
DialogResult result = MessageBox.Show("Unable to parse file metadata.\nAttempt to open anyway?\n(May result in a \'Incorrect Key\' error if the salt is wrong.)",
"Missing or Corrupted Metadata", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk);
"Missing or Corrupted Metadata", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);
if (result == DialogResult.Yes)
{
// Default initialization vector from builds v1.1.2 and older
const string default_IV = "16CHARSLONG12345";
initialVectorBytes = Encoding.ASCII.GetBytes(default_IV);
saltValueBytes = Encoding.ASCII.GetBytes(salt);
}
else { return null; }
else
{
PublicVar.metadataCorrupt = true;
return null;
}
}
else
{

View file

@ -78,8 +78,30 @@ private async Task DecryptAES()
toolbarPanel.Enabled = false;
richTextBox.ReadOnly = true;
string openedFileText = await reader.ReadToEndAsync();
richTextBox.Text = await AES.Decrypt(openedFileText, TypedPassword.Value, null, settings.HashAlgorithm,
Convert.ToInt32(settings.PasswordIterations), Convert.ToInt32(settings.KeySize)); ;
if (string.IsNullOrEmpty(settings.TheSalt))
{
richTextBox.Text = await AES.Decrypt(openedFileText, TypedPassword.Value, null, settings.HashAlgorithm,
Convert.ToInt32(settings.PasswordIterations), Convert.ToInt32(settings.KeySize));
}
else
{
string currentRichTextBoxText = richTextBox.Text;
richTextBox.Text = await AES.Decrypt(openedFileText, TypedPassword.Value, settings.TheSalt, settings.HashAlgorithm,
Convert.ToInt32(settings.PasswordIterations), Convert.ToInt32(settings.KeySize));
if (PublicVar.metadataCorrupt)
{
PublicVar.openFileName = Path.GetFileName(filePath);
PublicVar.metadataCorrupt = false;
mainMenu.Enabled = true;
toolbarPanel.Enabled = true;
richTextBox.ReadOnly = false;
UseWaitCursor = false;
richTextBox.ResumeDrawing();
richTextBox.Text = currentRichTextBoxText;
richTextBox.Modified = false;
return;
}
}
}
Text = Path.GetFileName(openFileDialog.FileName) + " " + PublicVar.appName;
filePath = openFileDialog.FileName;
@ -1904,6 +1926,7 @@ private void VariablesMainMenu_Click(object sender, EventArgs e)
Debug.WriteLine("okPressed: " + PublicVar.okPressed);
Debug.WriteLine("RichTextBox.Modified: " + richTextBox.Modified);
Debug.WriteLine("EditorMenuStrip: " + contextMenu.Enabled);
Debug.WriteLine("metadataCorrupt: " + PublicVar.metadataCorrupt);
#endif
}
#endregion

View file

@ -68,6 +68,7 @@ static class PublicVar
public static bool messageBoxCenterParent = false;
public const string appName = "Crypto Notepad";
public static string openFileName;
public static bool metadataCorrupt = false;
}
static class TypedPassword

View file

@ -662,6 +662,7 @@ public string passwordGeneratorLength {
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("10")]
public string passwordGeneratorNumberOfStrings {
@ -672,5 +673,18 @@ public string passwordGeneratorNumberOfStrings {
this["passwordGeneratorNumberOfStrings"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Configuration.SettingsProviderAttribute(typeof(PortableSettingsProvider))]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string TheSalt {
get {
return ((string)(this["TheSalt"]));
}
set {
this["TheSalt"] = value;
}
}
}
}

View file

@ -149,8 +149,11 @@
<Setting Name="passwordGeneratorLength" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
<Value Profile="(Default)">40</Value>
</Setting>
<Setting Name="passwordGeneratorNumberOfStrings" Type="System.String" Scope="User">
<Setting Name="passwordGeneratorNumberOfStrings" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
<Value Profile="(Default)">10</Value>
</Setting>
<Setting Name="TheSalt" Provider="PortableSettingsProvider" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>