SebWindowsClient.ConfigurationUtils.SEBConfigFileManager.EncryptDataUsingPassword C# (CSharp) Method

EncryptDataUsingPassword() public static method

Encrypt preferences using a password
public static EncryptDataUsingPassword ( byte data, string password, bool passwordIsHash, SEBSettings configPurpose ) : byte[]
data byte
password string
passwordIsHash bool
configPurpose SEBSettings
return byte[]
        public static byte[] EncryptDataUsingPassword(byte[] data, string password, bool passwordIsHash, SEBSettings.sebConfigPurposes configPurpose)
        {
            string prefixString;
            // Check if .seb file should start exam or configure client
            if (configPurpose == SEBSettings.sebConfigPurposes.sebConfigPurposeStartingExam)
            {
                // prefix string for starting exam: normal password will be prompted
                prefixString = PASSWORD_MODE;
            }
            else
            {
                // prefix string for configuring client: configuring password will either be hashed admin pw on client
                // or if no admin pw on client set: empty pw
                prefixString = PASSWORD_CONFIGURING_CLIENT_MODE;
                if (!String.IsNullOrEmpty(password) && !passwordIsHash)
                {
                    //empty password means no admin pw on clients and should not be hashed
                    //or we got already a hashed admin pw as settings pw, then we don't hash again
                    password = SEBProtectionController.ComputePasswordHash(password);
                }
            }
            byte[] encryptedData = SEBProtectionController.EncryptDataWithPassword(data, password);
            // Create byte array large enough to hold prefix and data
            byte[] encryptedSebData = new byte[encryptedData.Length + PREFIX_LENGTH];
            Buffer.BlockCopy(Encoding.UTF8.GetBytes(prefixString), 0, encryptedSebData, 0, PREFIX_LENGTH);
            Buffer.BlockCopy(encryptedData, 0, encryptedSebData, PREFIX_LENGTH, encryptedData.Length);

            return encryptedSebData;
        }

Usage Example

        public static byte[] EncryptSEBSettingsWithCredentials(string settingsPassword, bool passwordIsHash, X509Certificate2 certificateRef, SEBSettings.sebConfigPurposes configPurpose, bool forEditing)
        {
            byte[] bytes    = Encoding.UTF8.GetBytes(Plist.writeXml((object)SEBSettings.settingsCurrent).Replace("<array />", "<array></array>").Replace("<dict />", "<dict></dict>").Replace("<data />", "<data></data>"));
            string password = (string)null;

            if (string.IsNullOrEmpty(settingsPassword) && configPurpose == SEBSettings.sebConfigPurposes.sebConfigPurposeConfiguringClient)
            {
                password = "";
            }
            else if (string.IsNullOrEmpty(settingsPassword) && certificateRef == null)
            {
                if (SEBMessageBox.Show(SEBUIStrings.noEncryptionChosen, SEBUIStrings.noEncryptionChosenSaveUnencrypted, MessageBoxIcon.Question, MessageBoxButtons.YesNo, forEditing) == DialogResult.Yes)
                {
                    return(bytes);
                }
                return((byte[])null);
            }
            byte[] data = GZipByte.Compress(bytes);
            if (!string.IsNullOrEmpty(settingsPassword))
            {
                password = settingsPassword;
            }
            byte[] numArray1;
            if (password != null)
            {
                numArray1 = SEBConfigFileManager.EncryptDataUsingPassword(data, password, passwordIsHash, configPurpose);
            }
            else
            {
                byte[] numArray2 = new byte[data.Length + 4];
                Buffer.BlockCopy((Array)Encoding.UTF8.GetBytes("plnd"), 0, (Array)numArray2, 0, 4);
                Buffer.BlockCopy((Array)data, 0, (Array)numArray2, 4, data.Length);
                numArray1 = (byte[])numArray2.Clone();
            }
            if (certificateRef != null)
            {
                numArray1 = SEBConfigFileManager.EncryptDataUsingIdentity(numArray1, certificateRef);
            }
            return(GZipByte.Compress(numArray1));
        }