Saltar al contenido

cómo enmascarar/ocultar la dirección de correo electrónico en C#

No olvides que en la informática un error casi siempre tiene diferentes resoluciones, por lo tanto nosotros aquí te compartimos lo mejor y más óptimo.

Solución:

Aquí hay un enfoque para resolver esto con Regex

string input = "[email protected]";
string pattern = @"(?<=[w]1)[w-._+%]*(?=[w]1@)";
string result = Regex.Replace(input, pattern, m => new string('*', m.Length));
//j**[email protected]

Explicación:

(?<=[w]1) el nombre tiene que comenzar con 1 palabra-carácter

[w-._+%]* la pieza de repuesto puede contener 0-n caracteres de palabra, incluidos -_.+%

(?=[w]1@) el nombre tiene que terminar con un carácter de palabra seguido de un @

Dependiendo de la cantidad de caracteres que desee que permanezcan sin cambios, puede cambiar 1 a 2 o algo más al principio o al final.

Si siempre desea enmascarar algo entre el primer carácter y el último carácter antes de @ con un número fijo de caracteres enmascarados, puede usar lo siguiente

var email="[email protected]";
var maskedEmail = string.Format("0****1", email[0], 
email.Substring(email.IndexOf('@')-1));

Puede modificar la línea anterior para su requerimiento.

La línea de arriba te dará el resultado "a****[email protected]"

Tenga en cuenta que enmascarar el correo electrónico siempre con un número fijo de caracteres hará que sea difícil adivinar el correo electrónico y es un poco más seguro.

ex: [email protected]

después de la máscara: un ****[email protected]

No puedo ver dónde se inicializa su variable k en su fragmento de código. Si tuviera que hacer una puñalada salvaje en cuanto a por qué está obteniendo una excepción de índice fuera de los límites, esa sería mi puñalada.

Aunque diría que podrías lograr algo muy similar a lo que estás haciendo usando Regex. Lo hice así:

public string ObfuscateEmail(string email)

    var displayCase = email;

    var partToBeObfuscated = Regex.Match(displayCase, @"[^@]*").Value;
    if (partToBeObfuscated.Length - 3 > 0) 
        var obfuscation = "";
        for (var i = 0; i < partToBeObfuscated.Length - 3; i++) obfuscation += "*";
        displayCase = String.Format("0123",  displayCase[0], displayCase[1], obfuscation, displayCase.Substring(partToBeObfuscated.Length - 1));
     else if (partToBeObfuscated.Length - 3 == 0) 
        displayCase = String.Format("0*1", displayCase[0], displayCase.Substring(2));
    

    return displayCase;

Aquí hay un violín de todos sus casos de prueba proporcionados que pasan bastante cerca de lo que estaba describiendo https://dotnetfiddle.net/fU2RUo

[EDIT] Mi código no intenta ofuscar los correos electrónicos cuyas direcciones antes de la @ tienen menos de 3 caracteres, si este es un requisito, deberá modificar el código, pero no pensé que fuera un caso muy realista tener que construir un Caso para.

Comentarios y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *