GitHunt
DB

dburriss/PIIHide

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

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

Languages

F#100.0%

Contributors

MIT License
Created April 14, 2020
Updated November 18, 2022