internal static string Archive(string text, StorageModes mode)
        {
            var data = Encoding.UTF8.GetBytes(text);

            byte[] archivedData = null;
            switch (mode)
            {
            case StorageModes.CompressAndEncrypt:
                archivedData = AesEncryption.Encrypt(DeflateCompression.Compress(data));
                break;

            case StorageModes.Compress:
                archivedData = DeflateCompression.Compress(data);
                break;

            case StorageModes.Store:
                archivedData = data;
                break;
            }
            var dataWithEncryptionInfo = DataWithArchivingInfo.FromUnprocessedData(archivedData, mode);

            return(Convert.ToBase64String(dataWithEncryptionInfo.Data));
        }
        internal static string Unarchive(string text)
        {
            var data = Convert.FromBase64String(text);

            byte[] unarchivedData         = null;
            var    dataWithEncryptionInfo = DataWithArchivingInfo.FromProcessedData(data);
            var    mode = dataWithEncryptionInfo.Mode;

            switch (mode)
            {
            case StorageModes.CompressAndEncrypt:
                unarchivedData = DeflateCompression.Decompress(AesEncryption.Decrypt(dataWithEncryptionInfo.Data));
                break;

            case StorageModes.Compress:
                unarchivedData = DeflateCompression.Decompress(dataWithEncryptionInfo.Data);
                break;

            case StorageModes.Store:
                unarchivedData = dataWithEncryptionInfo.Data;
                break;
            }
            return(Encoding.UTF8.GetString(unarchivedData));
        }