Пример #1
0
        public static void Demo()
        {
            // open input and output file streams
            Stream inputFile  = File.OpenRead(".\\ResourceFiles\\userdata1.parquet");
            Stream outputFile = File.OpenWrite(".\\ResourceFiles\\out1.parquet");

            // Create reader
            using ParquetFileReader reader = new ParquetFileReader(inputFile);

            // Copy source settings as target settings
            List <FileEncryptionSettings> writerSettings = reader.FileEncryptionSettings
                                                           .Select(s => Copy(s))
                                                           .ToList();

            // Modify a few column settings
            writerSettings[0]  = new FileEncryptionSettings <DateTimeOffset?>(encryptionKey, SqlSerializerFactory.Default.GetDefaultSerializer <DateTimeOffset?>());
            writerSettings[3]  = new FileEncryptionSettings <string>(encryptionKey, EncryptionType.Deterministic, new SqlVarcharSerializer(size: 255));
            writerSettings[10] = new FileEncryptionSettings <double?>(encryptionKey, StandardSerializerFactory.Default.GetDefaultSerializer <double?>());

            // Create and pass the target settings to the writer
            using ParquetFileWriter writer = new ParquetFileWriter(outputFile, writerSettings);

            // Process the file
            ColumnarCryptographer cryptographer = new ColumnarCryptographer(reader, writer);

            cryptographer.Transform();

            Console.Clear();
        }
Пример #2
0
        public void DecryptParquetFileCorrectly()
        {
            using Stream inputFile         = File.OpenRead("ResourceFiles\\ciphertext.parquet");
            using Stream outputFile        = File.OpenWrite($"ResourceFiles\\{nameof(DecryptParquetFileCorrectly)}_out.parquet");
            using ParquetFileReader reader = new ParquetFileReader(inputFile);

            reader.RegisterKeyStoreProviders(
                new Dictionary <string, EncryptionKeyStoreProvider> {
                [azureKeyProvider.ProviderName] = azureKeyProvider
            }
                );

            var writerSettings = reader.FileEncryptionSettings
                                 .Select(s => (FileEncryptionSettings)s.Clone())
                                 .ToList();

            var targetColumnTypes = reader.FileEncryptionSettings
                                    .Select(s => s.GetSerializer().GetGenericType())
                                    .ToList();

            writerSettings[0]  = Create(targetColumnTypes[0], dataEncryptionKey, EncryptionType.Plaintext, GetSerializer(targetColumnTypes[0]));
            writerSettings[3]  = Create(targetColumnTypes[3], dataEncryptionKey, EncryptionType.Plaintext, GetSerializer(targetColumnTypes[3]));
            writerSettings[10] = Create(targetColumnTypes[10], dataEncryptionKey, EncryptionType.Plaintext, GetSerializer(targetColumnTypes[10]));

            using ParquetFileWriter writer = new ParquetFileWriter(outputFile, writerSettings);

            ColumnarCryptographer cryptographer = new ColumnarCryptographer(reader, writer);

            cryptographer.Transform();
        }
Пример #3
0
        private void OnExecute()
        {
            string outPath = OutputFilePath ?? (Path.GetFileNameWithoutExtension(DataFilePath) + "_output" + Path.GetExtension(DataFilePath));

            // load configuration file
            // YamlConfigReader configFile = new YamlConfigReader(".\\resources\\config.yaml");
            YamlConfigReader     configFile       = new YamlConfigReader(MetadataFilePath);
            DataProtectionConfig protectionConfig = configFile.Read();

            bool   sourceIsEncrypted = false;
            bool   targetIsEncrypted = true;
            string outputFileName    = "";

            switch (Command.ToLower())
            {
            case "encrypt":
                sourceIsEncrypted = false;
                targetIsEncrypted = true;
                outputFileName    = DataFilePath.Split('.')[0] + "-encrypted." + DataFilePath.Split('.')[1];
                break;

            case "decrypt":
                sourceIsEncrypted = true;
                targetIsEncrypted = false;
                outputFileName    = DataFilePath.Split('.')[0] + "-decrypted." + DataFilePath.Split('.')[1];
                break;

            default:
                Console.WriteLine("Not a valid command. Try 'encrypt' or 'decrypt' as a command.");
                break;
            }


            // For encryption operations, we're going to remove output settings

            // open input and output file streams
            // Stream inputFile = File.OpenRead (".\\resources\\userdata.parquet");
            // Stream outputFile = File.OpenWrite (".\\resources\\userdata.parquet");
            Stream outputFile = File.OpenWrite(outputFileName);

            // Create reader
            // using ParquetFileReader reader = new ParquetFileReader (inputFile);
            CSVDataReader reader = new CSVDataReader(new StreamReader(DataFilePath), protectionConfig, TokenCredential, sourceIsEncrypted);

            // Copy source settings as target settings

            /*
             * List<FileEncryptionSettings> writerSettings = reader.FileEncryptionSettings
             *  .Select (s => Copy (s))
             *  .ToList ();
             */

            // Create and pass the target settings to the writer
            // using ParquetFileWriter writer = new ParquetFileWriter (outputFile, writerSettings);
            using CSVDataWriter writer = new CSVDataWriter(new StreamWriter(outputFile), protectionConfig, TokenCredential, reader.Header, targetIsEncrypted);

            // Process the file
            ColumnarCryptographer cryptographer = new ColumnarCryptographer(reader, writer);

            try
            {
                cryptographer.Transform();
                Console.WriteLine($"File processed successfully. Verify output file contains encrypted data.");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }