Foros del Web » Programando para Internet » PHP »

Funcion dentro de otra

Estas en el tema de Funcion dentro de otra en el foro de PHP en Foros del Web. Hola gente, estoy trabajando con Laravel readaptando un sistema viejo que por varios motivos no puedo modificar la base de datos, principalmente porque el sistema ...
  #1 (permalink)  
Antiguo 13/02/2019, 06:24
 
Fecha de Ingreso: julio-2009
Mensajes: 98
Antigüedad: 9 años, 6 meses
Puntos: 1
Funcion dentro de otra

Hola gente, estoy trabajando con Laravel readaptando un sistema viejo que por varios motivos no puedo modificar la base de datos, principalmente porque el sistema viejo va a seguir usandose y no hay codigo fuente del mismo como para modificarlo.

El registro me guarda la contraseña en bcrypt (yo ya adapte el hash que necesito y reemplacé la funcion de momento para probar... hasta aca todo bien)

El problema es que en el SQLSrv tengo que guardar la contraseña en binary.

Código:
SQLSTATE[42000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]No se permite la conversión implícita del tipo de datos nvarchar a binary. Utilice la función CONVERT para ejecutar esta consulta. (SQL: insert into [user_auth] ([name], [email], [password], [updated_at], [created_at]) values (Nombre, [email protected], 0xb13f7b1e2fc16d380d94b2b27fe5c3c3, 2019-02-13 12:37:58.817, 2019-02-13 12:37:58.817))
La contraseña me la guarda correctamente como la necesito, peeero necesito que esa misma la almacene en binary

Yo tengo esta parte del codigo
Código PHP:
return User::create([
            
'name' => $data['name'],
            
'email' => $data['email'],
            
'password' => bcrypt($data['password']),
        ]); 
Que me convierte la contraseña a como la necesito, pero necesitaria que eso lo pase a binary antes y no encuentro la solucion

Acá dejo el metodo de encriptación:

Código:
function bcrypt($str, $options = []){
        //return app('hash')->make($value, $options);

        $key = array();
        $dst = array();
        $i = 0;

        $nBytes = strlen($str);
        while ($i < $nBytes){
            $i++;
            $key[$i] = ord(substr($str, $i - 1, 1)); 
            $dst[$i] = $key[$i];
        } 

        while ($i < 16){ 
            $i++;
            $key[$i] = 0;
            $dst[$i] = $key[$i];
        } 

        $rslt = $key[1] + $key[2]*256 + $key[3]*65536 + $key[4]*16777216;
        $one = $rslt * 213119 + 2529077;
        $one = $one - intval($one/ 4294967296) * 4294967296;

        $rslt = $key[5] + $key[6]*256 + $key[7]*65536 + $key[8]*16777216;
        $two = $rslt * 213247 + 2529089;
        $two = $two - intval($two/ 4294967296) * 4294967296;

        $rslt = $key[9] + $key[10]*256 + $key[11]*65536 + $key[12]*16777216;
        $three = $rslt * 213203 + 2529589;
        $three = $three - intval($three/ 4294967296) * 4294967296;

        $rslt = $key[13] + $key[14]*256 + $key[15]*65536 + $key[16]*16777216;
        $four = $rslt * 213821 + 2529997;
        $four = $four - intval($four/ 4294967296) * 4294967296;

        $key[4] = intval($one/16777216); 
        $key[3] = intval(($one - $key[4] * 16777216) / 65535);
        $key[2] = intval(($one - $key[4] * 16777216 - $key[3] * 65536) / 256);
        $key[1] = intval(($one - $key[4] * 16777216 - $key[3] * 65536 - $key[2] * 256));

        $key[8] = intval($two/16777216); 
        $key[7] = intval(($two - $key[8] * 16777216) / 65535);
        $key[6] = intval(($two - $key[8] * 16777216 - $key[7] * 65536) / 256);
        $key[5] = intval(($two - $key[8] * 16777216 - $key[7] * 65536 - $key[6] * 256));

        $key[12] = intval($three/16777216); 
        $key[11] = intval(($three - $key[12] * 16777216) / 65535);
        $key[10] = intval(($three - $key[12] * 16777216 - $key[11] * 65536) / 256);
        $key[9] = intval(($three - $key[12] * 16777216 - $key[11] * 65536 - $key[10] * 256));

        $key[16] = intval($four/16777216); 
        $key[15] = intval(($four - $key[16] * 16777216) / 65535);
        $key[14] = intval(($four - $key[16] * 16777216 - $key[15] * 65536) / 256);
        $key[13] = intval(($four - $key[16] * 16777216 - $key[15] * 65536 - $key[14] * 256));

        $dst[1] = $dst[1] ^ $key[1];

        $i=1;
        while ($i<16){
            $i++;
            $dst[$i] = $dst[$i] ^ $dst[$i-1] ^ $key[$i];
        }

        $i=0;
        while ($i<16){
            $i++;
            if ($dst[$i] == 0) $dst[$i] = 102;
        }

        $encrypt = "0x";
        $i=0;
        while ($i<16){
            $i++;
            if ($dst[$i] < 16) {
                $encrypt = $encrypt . "0" . dechex($dst[$i]);
            } else {
                $encrypt = $encrypt . dechex($dst[$i]);
            }
        }
        return $encrypt;
    }
}

Última edición por sk0rpi0n; 13/02/2019 a las 06:44



La zona horaria es GMT -6. Ahora son las 15:53.