Descifrar valores de cadena de una columna de una tabla en una consulta

Un usuario Pregunto ✅

Sarazin73

Hola,
busco descifrar valores de cadena de una columna encriptada en una tabla importada como una consulta en mi informe de Power BI.
La cadena se cifra en la entrada con un algoritmo XOR de la siguiente manera:

String ToCrypt = «»;

for (int i = 0; i <"sample_string" .length (); i ++) {
ToCrypt = ToCrypt + (char) («sample_string» .charAt (i) ^ 24); // (XOR 24)
}

¿Cómo puedo hacer en Power Query para descifrar en una nueva columna el contenido de esta columna encriptada para cada fila de mi consulta? (conjunto de datos). Gracias por tus ideas y comentarios.

Nolock

En respuesta a Sarazin73

Hola @ Sarazin73,

He escrito una función personalizada para ti:

fnXorCrypt = (
    string as text, 
    xorValue as number
) as text =>
    // concat encrypted characters
    List.Accumulate(
        // get a list of chars
        Text.ToList(string),
        // initial string
        "",
        // accumulate last state and a new encrypted character
        (state, current) =>
            state 
            & 
            Character.FromNumber(
                Number.BitwiseXor(
                    Character.ToNumber(current), 
                    xorValue
                )
            )
    )

El uso:

EncodedString = fnXorCrypt("Lundi", 42)

Una prueba:

Capture.PNG

Nolock

Hola @ Sarazin73,

¿También tiene el algoritmo de descifrado en código tipo c? Si tuviera uno, desarrollaría una función en M para ti.

¿Y puedes publicar algunos ejemplos para probar?

Gracias 🙂

Sarazin73

En respuesta a Nolock

Hola,

¡Gracias por ayudarme!
El algoritmo utilizado es el mismo para descifrar que para cifrar. El script externo inicial que codifica los datos como fuente está en lenguaje java. Finalmente hemos hecho pruebas con XOR 42 en lugar de XOR 24. A continuación, algunas muestras con su correspondiente cadena de codificación.

Lundi: f_DNC

Mardi: gKXNC

Mercredi: gOXIXONC

Jeudi: `O_NC

Vendredi: | ODNXONC

Samedi: yKGONC

Dimanche: nCGKDIBO

Nolock

En respuesta a Sarazin73

Hola @ Sarazin73,

He escrito una función personalizada para ti:

fnXorCrypt = (
    string as text, 
    xorValue as number
) as text =>
    // concat encrypted characters
    List.Accumulate(
        // get a list of chars
        Text.ToList(string),
        // initial string
        "",
        // accumulate last state and a new encrypted character
        (state, current) =>
            state 
            & 
            Character.FromNumber(
                Number.BitwiseXor(
                    Character.ToNumber(current), 
                    xorValue
                )
            )
    )

El uso:

EncodedString = fnXorCrypt("Lundi", 42)

Una prueba:

Capture.PNG

Sarazin73

En respuesta a Nolock

Hola NoLock,

gracias por tu trabajo. Es perfecto !

Deja un comentario

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