Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/02/2019, 06:24
sk0rpi0n
 
Fecha de Ingreso: julio-2009
Mensajes: 121
Antigüedad: 14 años, 7 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