none
Problemas con cadenas string RRS feed

  • Pregunta

  • Buen día. 

    Pasa que tengo la siguiente petición http en angular a un web API en asp.net:

     obtener_usuario(usuario, contrasena) {
        let promesa = new Promise((resolve, reject) => {   
          this.http.get(this.conexion.url + "/LogIn/" + this.cifrar.cifrar_cadena(usuario) + "," + this.cifrar.cifrar_cadena(contrasena)).subscribe(result => {
            if (result.json()[0]) {
              resolve(true);
            } else {
              resolve(false);
            }
          })
        }).catch(error => console.log("Error usuarios.obtener_usuario(): " + JSON.stringify(error)));
        return promesa;
      }

    La "," solo es para separar el string en el controlador:

    public IEnumerable<usuarios> GetUsuarios(string id) {

    //aquí aun falta el proceso de decifrado de la cadena string[] separadas = id.Split(','); string username = separadas[0]; string password = separadas[1]; yield return entities.usuarios.FirstOrDefault(usuario => usuario.UserName == username && usuario.Pass == password); }

    El método cifrar cadena() cifra el string que recibe con AES :

    import { Injectable } from '@angular/core';
    import CryptoJS from 'crypto-js';
    
    @Injectable()
    export class EncriptadorProvider {
      key: string = "secret key 123"
    
      cifrar_cadena(data) {
        return CryptoJS.AES.encrypt(data, this.key);
      }
    }


    Entonces, hay veces que la petición queda por ejemplo: http://localhost:60684/api/LogIn/U2FsdGVkX1/MP61DoB6QoxO9uqCEu8FwEybmTVo44bU=,U2FsdGVkX19qarXOau26Dwyh7G10+F4myBwg1YXjfl8=

    Aquí el problema, hay veces que el cifrado genera "/" y el servicio lo reconoce como un recurso (http://localhost:60684/api/LogIn/U2FsdGVkX1/ ene este caso) y me marca: "HTTP Error 404.0 - Not Found Se ha quitado el recurso que está buscando, se le ha cambiado el nombre o no está disponible en estos momentos".

    Existe alguna manera de modificar el string para cambiar el "/" por otro carácter para poder enviar al servicio y ahí volverlo a cambiar a su estado inicial para poder descifrar la cadena?

    Saludos.

    sábado, 17 de febrero de 2018 19:07

Respuestas

  • Lo que quieres se llama "Url-safe Base64". Hay varios estándares para lograrlo, pero si tienes control sobre los dos extremos (la parte servidora y el cliente javascript), puedes aplicar el sencillo criterio de reemplazar el símbolo '+' por por '-' y la '/' por '_'. Evidentemente, al recibir la cadena tendrás que hacer el reemplazo inverso antes de procesarla.
    sábado, 17 de febrero de 2018 19:32