Aquí está el formato de encriptación.
La estructura de la contraseña es la siguiente: <section1>-<section2>-<section3>-<section4>-<section5>
La longitud del primer nombre sumada a la longitud del apellido. es decir 'David Lindley' = 5 + 7 = 12
La última letra en mayúscula del primer nombre, es decir 'David Lindley' = 'D'
El primer carácter en minúsculas del apellido, es decir 'David Lindley' = 'l'
El número total de vocales (a, e, i, o, u) en el nombre completo, es decir 'David Lindley' = 4
Un hash del nombre basado en lo siguiente:
'David Lindley' = 'Davi Lney''Davi Lney' = 'DaviLney''DaviLney' = [100, 97, 118, 105, 108, 110, 101, 121]100 + 97 + 118 + 105 + 108 + 110 + 101 + 121 = 860 El resultado del paso 4 es el código de la Sección 5 'David Lindley' = '12-Dl-4-860'
El primer número es el nombre y el apellido sumados
segunda letra hay primera letra mayúscula
tercera letra hay primera letra minúscula
el número final sigue a la eliminación de espacios y las letras duplicadas, luego se agrega el código de caracteres UTF-8/16 que coincide con cada letra
Entonces, mi pregunta es cómo escribiría una función que tomaría una cadena cifrada y luego la descifraría para obtener el nombre normal.
No soy un experto en criptografía pero no creo que puedas ya que hay una pérdida de información. Un algoritmo inverso tendría que calcular una enorme cantidad de combinaciones usando un diccionario de nombres, encriptándolos y comparándolos con su cadena encriptada. Básicamente fuerza bruta.
Luego, puede detenerse en la primera coincidencia o tal vez generar una lista de coincidencias.
Si no tiene que usar este método y solo necesita cifrar/descifrar cadenas simples, le sugiero que eche un vistazo al cifrado simétrico .