Skip to main content

Format Preserving Encryption with FF1 and FF3-1

Project description

Installation

This library uses PyCryptodome which means a C compiler is required. For Mac and Linux users this is already installed. For Windows users please follow this guide from PyCryptoDome.

https://pycryptodome.readthedocs.io/en/latest/src/installation.html#windows-from-sources

Usage

The libray is imported as from FPE import FPE.

To generate a tweak use FPE.generate_tweak(tweak_length) where tweak_len is the length of the tweak in bytes. Note that for FF3-1 the tweak_length must be 7 bytes.

To generate a key use FPE.generate_key(), this will generate a 16 byte key.

To make a cipher object use cipher = FPE.New(key,tweak,mode)

Currently supported modes are Mode.FF1 and Mode.FF3-1

To encrypt use cipher.encrypt(plaintext,format)

Currently supported formats are:

Format.DIGITS
Format.CREDITCARD
Format.LETTERS
Format.STRING
Format.EMAIL
Format.CPR

to decrypt use cipher.decrypt(ciphertext,format)

The library also supports CSV files

To encrypt a csv file use cipher.encryptCSV(InputFilePath,OutputFilePath,formats) where formats is a list of formats sorted by the columns

To decrypt a csv file use cipher.decryptCSV(InputFilePath,OutputFilePath,formats)

to generate a random CSV file with certain formats use cipher.generateData(OutputFilePath,rows,formats,variables) where rows define the number of rows in the CSV file. Formats is the lists of formats to use. Variables is the list of variable names used for the first row.

Examples

Example of encrypting and decrypting "123456" as DIGITS and printing the output

from FPE import FPE

if __name__ == '__main__':

	T = FPE.generate_tweak(8)
	
	key = FPE.generate_key()
	
	cipher = FPE.New(key,T,FPE.Mode.FF1)
	
	ciphertext = cipher.encrypt('123456',FPE.Format.DIGITS)
	
	print(ciphertext)
	
	plaintext = cipher.decrypt(ciphertext,FPE.Format.DIGITS)
	
	print(plaintext)

Example of generating, encrypting and decrypting a 1000 row CSV file

from FPE import FPE, Format

variables = [
	'Username','Password','Email','PhoneNumber','Cpr-number',
	'Creditcard','adress','city','zip','country'
]


formats = [
	Format.LETTERS, Format.STRING, Format.EMAIL, Format.DIGITS,
	Format.CPR, Format.CREDITCARD,Format.STRING,Format.LETTERS,
	Format.DIGITS,Format.LETTERS
]

if __name__ == '__main__':
	
	T = FPE.generate_tweak(7)
	key = FPE.generate_key()
	cipher = FPE.New(key,T,FPE.Mode.FF3)
	cipher.generateData('testData.csv',1000,formats,variables)
	cipher.encryptCSV('testData.csv','encryptedData.csv',formats)
	cipher.decryptCSV('encryptedData.csv','decryptedData.csv',formats)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

FPE-0.1.2.tar.gz (117.8 kB view details)

Uploaded Source

Built Distribution

FPE-0.1.2-cp39-cp39-win_amd64.whl (81.6 kB view details)

Uploaded CPython 3.9 Windows x86-64

File details

Details for the file FPE-0.1.2.tar.gz.

File metadata

  • Download URL: FPE-0.1.2.tar.gz
  • Upload date:
  • Size: 117.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for FPE-0.1.2.tar.gz
Algorithm Hash digest
SHA256 68d2071d2ca6e792fabea204d16cbcbe32634b87037a2508533108b3b6d2904a
MD5 556dfaff59559042742a8dbd76f9506e
BLAKE2b-256 d3699878654c24788d6d442c45cc422fd326bfae9f0fb1bdaedfb8264517ed75

See more details on using hashes here.

File details

Details for the file FPE-0.1.2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: FPE-0.1.2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 81.6 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for FPE-0.1.2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 0488ff545154a4443b1bc751ce564097728dceba2d5fa2da9e3cf8bcdbbf3b4e
MD5 6f97e2cfbb4cd53ddcae638cb092a83c
BLAKE2b-256 1020bff9d3e3241110d8dce9d8708a36062cd91c4fc2489929b1bcf1983d4b8c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page