NAME

String::Mask::XS - mask sensitive data faster

VERSION

Version 1.00

SYNOPSIS

Quick summary of what the module does.

mask('thisusedtobeanemail@gmail.com'); # thisusedtobean*****@*****.***
mask('thisusedtobeanemail@gmail.com', 'start', 5); # 'thisu**************@*****.***'
mask('thisusedtobeanemail@gmail.com', 'end'); # '***************mail@gmail.com'
mask('thisusedtobeanemail@gmail.com', 'end', 5); # '*******************@****l.com'
mask('thisusedtobeanemail@gmail.com', 'middle'); # '*******dtobeanemail@g****.***'
mask('thisusedtobeanemail@gmail.com', 'middle', 5); # '************anema**@*****.***'
mask('thisusedtobeanemail@gmail.com', 'email'); # 'thisu**************@*****.***'
mask('thisusedtobeanemail@gmail.com', 'email', 2); # 'thisusedtobeanema**@*****.***'

mask('9991234567'); # '99912*****'
mask('9991234567', 'start', 3); # '999*******'
mask('9991234567', 'end'); # '*****34567'
mask('9991234567', 'end', 3); # '*******567'
mask('9991234567', 'middle'); # '**91234***'
mask('9991234567', 'middle', 4); # '***1234***'

mask('9991234567', 'middle', 4, '_'); # '___1234___'

Description

Data masking or data obfuscation is the process of hiding original data with modified content (characters or other data). The main reason for applying masking to a string is to protect data that is classified as personally identifiable information, sensitive personal data, or commercially sensitive data. However, the data must remain usable for the purposes of undertaking valid test cycles. It must also look real and appear consistent.

EXPORT

mask

This function accepts 4 arguments:

mask($string, $position, $length, $char);
string

The text that you like to mask.

position

The position you would like to be visible. Currently you have four options start, middle, end or email. The default is start.

length

The number of characters that should remain visible. The default is half the length of the passed string.

mask character

The mask character that will replace any masked text. The default is *.

BENCHMARK

use Benchmark qw(:all);
use String::Mask;
use String::Mask::XS;

timethese(10000000, {
	'Mask' => sub {
		my $string = 'thisusedtobeanemail@gmail.com';
		String::Mask::mask($string);
	},
	'XS' => sub {
		my $string = 'thisusedtobeanemail@gmail.com';
		String::Mask::XS::mask($string);
	}
});

...

Benchmark: timing 10000000 iterations of Mask, XS...
	Mask: 17 wallclock secs (16.78 usr +  0.00 sys = 16.78 CPU) @ 595947.56/s (n=10000000)
	XS:  0 wallclock secs ( 1.43 usr +  0.00 sys =  1.43 CPU) @ 6993006.99/s (n=10000000)

AUTHOR

LNATION, <email at lnation.org>

BUGS

Please report any bugs or feature requests to bug-string-mask-xs at rt.cpan.org, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=String-Mask-XS. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc String::Mask::XS

You can also look for information at:

ACKNOWLEDGEMENTS

LICENSE AND COPYRIGHT

This software is Copyright (c) 2024 by LNATION.

This is free software, licensed under:

The Artistic License 2.0 (GPL Compatible)