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(); }
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(); }
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); } }