function deidentify_table_with_multiple_crypto_hash()

in dlp/src/deidentify_table_with_multiple_crypto_hash.php [57:179]


function deidentify_table_with_multiple_crypto_hash(
    // TODO(developer): Replace sample parameters before running the code.
    string $callingProjectId,
    string $inputCsvFile = './test/data/table6.csv',
    string $outputCsvFile = './test/data/deidentify_table_with_multiple_crypto_hash_output.csv',
    string $transientCryptoKeyName1 = 'YOUR-TRANSIENT-CRYPTO-KEY-1',
    string $transientCryptoKeyName2 = 'YOUR-TRANSIENT-CRYPTO-KEY-2'
): void {
    // Instantiate a client.
    $dlp = new DlpServiceClient();

    $parent = "projects/$callingProjectId/locations/global";

    // Read a CSV file.
    $csvLines = file($inputCsvFile, FILE_IGNORE_NEW_LINES);
    $csvHeaders = explode(',', $csvLines[0]);
    $csvRows = array_slice($csvLines, 1);

    // Convert CSV file into protobuf objects.
    $tableHeaders = array_map(function ($csvHeader) {
        return (new FieldId)
            ->setName($csvHeader);
    }, $csvHeaders);

    $tableRows = array_map(function ($csvRow) {
        $rowValues = array_map(function ($csvValue) {
            return (new Value())
                ->setStringValue($csvValue);
        }, explode(',', $csvRow));
        return (new Row())
            ->setValues($rowValues);
    }, $csvRows);

    // Construct the table object.
    $tableToDeIdentify = (new Table())
        ->setHeaders($tableHeaders)
        ->setRows($tableRows);

    // Specify what content you want the service to de-identify.
    $content = (new ContentItem())
        ->setTable($tableToDeIdentify);

    // Specify the type of info the inspection will look for.
    // See https://cloud.google.com/dlp/docs/infotypes-reference for complete list of info types
    $infoTypes = [
        (new InfoType())->setName('EMAIL_ADDRESS'),
        (new InfoType())->setName('PHONE_NUMBER')
    ];

    $inspectConfig = (new InspectConfig())
        ->setInfoTypes($infoTypes);

    // ---- First Crypto Hash Rule ----

    // Specify the transient key which will encrypt the data.
    $cryptoHashConfig1 = (new CryptoHashConfig())
        ->setCryptoKey((new CryptoKey())
            ->setTransient((new TransientCryptoKey())
                ->setName($transientCryptoKeyName1)));

    // Define type of de-identification as cryptographic hash transformation.
    $primitiveTransformation1 = (new PrimitiveTransformation())
        ->setCryptoHashConfig($cryptoHashConfig1);

    $fieldTransformation1 = (new FieldTransformation())
        ->setPrimitiveTransformation($primitiveTransformation1)
        // Specify fields to be de-identified.
        ->setFields([
            (new FieldId())->setName('userid')
        ]);

    // ---- Second Crypto Hash Rule ----

    // Specify the transient key which will encrypt the data.
    $cryptoHashConfig2 = (new CryptoHashConfig())
        ->setCryptoKey((new CryptoKey())
            ->setTransient((new TransientCryptoKey())
                ->setName($transientCryptoKeyName2)));

    // Define type of de-identification as cryptographic hash transformation.
    $primitiveTransformation2 = (new PrimitiveTransformation())
        ->setCryptoHashConfig($cryptoHashConfig2);

    $infoTypeTransformation = (new InfoTypeTransformation())
        ->setPrimitiveTransformation($primitiveTransformation2)
        ->setInfoTypes($infoTypes);

    $infoTypeTransformations = (new InfoTypeTransformations())
        ->setTransformations([$infoTypeTransformation]);

    $fieldTransformation2 = (new FieldTransformation())
        ->setInfoTypeTransformations($infoTypeTransformations)
        // Specify fields to be de-identified.
        ->setFields([
            (new FieldId())->setName('comments')
        ]);

    $recordtransformations = (new RecordTransformations())
        ->setFieldTransformations([$fieldTransformation1, $fieldTransformation2]);

    // Specify the config for the de-identify request
    $deidentifyConfig = (new DeidentifyConfig())
        ->setRecordTransformations($recordtransformations);

    // Send the request and receive response from the service.
    $deidentifyContentRequest = (new DeidentifyContentRequest())
        ->setParent($parent)
        ->setInspectConfig($inspectConfig)
        ->setDeidentifyConfig($deidentifyConfig)
        ->setItem($content);
    $response = $dlp->deidentifyContent($deidentifyContentRequest);

    // Print the results.
    $csvRef = fopen($outputCsvFile, 'w');
    fputcsv($csvRef, $csvHeaders);
    foreach ($response->getItem()->getTable()->getRows() as $tableRow) {
        $values = array_map(function ($tableValue) {
            return $tableValue->getStringValue();
        }, iterator_to_array($tableRow->getValues()));
        fputcsv($csvRef, $values);
    };
    printf('Table after deidentify (File Location): %s', $outputCsvFile);
}