/PIIHide

An experimental library for marking and encrypting properties on objects that contain personally identifiable information.

Primary LanguageF#MIT LicenseMIT

PII Hide

This is an experimental library that aims to make it simple to encrypt/decrypt specific properties on an object.

PiiHide on Nuget NuGet Status

Features

  • Easy marking of personally identifiable information with the PIIAttribute
  • Symmetric encryption of properties using AES
  • Idempotent encryption and decryption
  • Support for string, DateTime, and DateTimeOffset properties contained in a complex class
  • Support for nested properties of complex type

Usage

C#

Although the library is written in F#, it does provide extension methods OR access via a static Encryption class that respects the C# naming conventions.

Mark the sensitive information with the PIIAttribute.

using PIIHide;
//...
public class Person
{
    public long Id { get; set; }
    [PII]
    public string Name { get; set; }
    [PII]
    public Address Address { get; set; }
}

public class Address
{
    [PII]
    public string Street { get; set; }
    [PII]
    public string PostalCode { get; set; }
    public string Country { set; get; }
}

Then generate a key and call Encrypt/Decrypt on an instance of your class.

using PIIHide;
using PIIHide.CSharp.Extensions;
//...
var key = PII.GenerateKey();
var person = MakePerson();
person.Encrypt(key);
person.Decrypt(key);

OR

using PIIHide;
using PIIHide.CSharp;
//...
var key = PIIEncryption.GenerateKey();
var person = MakePerson();
PIIEncryption.Encrypt(key, person);
PIIEncryption.Decrypt(key, person);

See the sample for what this would look like.

F#

let person = aPerson()
let key = aKey()
PII.hide key person |> ignore
PII.show key person |> ignore