Cita:
Iniciado por julslash muchisimas gracias me ayudo muchisimo todas tus recomendaciones y codigos.
partiendo de que la clave guardada en el sql server es
//E$Àá[ØÍÍØ
cuando ejecuto el codigo php me imprime este resultado
/E$��[����
estuve investigando y corri un codigo para ver los caracteres ascii y no logro verlos cuando el numero es mayor a 128 desde ese en adelante los veo de la siguiente forma �
Ø = 155
À = 183
á = 160
Í = 214
eso tiene que ver con el numero de bytes?
el tema de codificacion es un tema muy profundo, pero bueno se explica que la codificacion que esta usando esa Funcion, es para Tratar con "CHARS"
cada CHAR por ejemplo la letra "A" o simbolo Ocupa 8 bits
A="01000001" //Esto sería una 'A' y a su lado los valores de sus Bits 0 y 1;
eso en una tabla ASCII, la tabla ASCII o ANSI ya no recuerdo bien esta parte,
con esos 8 bits puedes representar 255 simbolos; de ahi este fragmento "%255" con esto "%255" indica que si te pasas de los 255, al hacer el modulo no pases del valor de 255,
si tu suma te dio 10000; al pasarle el modulo de 255 te dara como resultado 235
Código HTML:
1000%255 = 235
bueno volviendo al tema, este valor que buscas "E$Àá[ØÍÍØ" lo que necesitas no es la representacion visual, lo que necesitas es saber el Valor del tipo INT de cada simbolo
como pausa leete este enlace, describe lo que es ANSI y ASCII
http://ascii-table.com/ansi-codes.php
en resument este valor "E$Àá[ØÍÍØ" trata de obtener su VALOR de cada Simbolo , no convirtiendo el string "E$Àá[ØÍÍØ" , sino el que esta almacenado en la base de datos, revisa como obtener la represantacion de BYTES o HEXADECIMALES cuando obtengas ello sera mas facil verificar si el resultado que te Otorga PHP es correcto
bueno en php te dejo 2 funciones para mostrar los valoers decimales hexadecimales,
Código PHP:
function representacionAnsiHorizontal($cadena)
{
$array_de_chars=(unpack('C*',$cadena));
echo "<pre>".PHP_EOL;
echo str_pad( "Char",13,' ').'= ';
foreach($array_de_chars as $char){
echo str_pad( chr($char) ,5,' ');
}
echo PHP_EOL;
echo str_pad( "DECIMAL",13,' ').'= ';
foreach($array_de_chars as $char){
echo str_pad( $char ,5,' ');
}
echo PHP_EOL;
echo str_pad( "HEXADECIMAL",13,' ').'= ';
foreach($array_de_chars as $char){
echo str_pad( 'x'.dechex($char) ,5,' ');
}
echo PHP_EOL;
echo "</pre>".PHP_EOL;
}
function representacionAnsi($cadena)
{
$array_de_chars=(unpack('C*',$cadena));
echo "<pre ><code>".PHP_EOL;
echo str_pad( "Decimal",13,' ',STR_PAD_BOTH);
echo str_pad( "HExadecimal",13,' ',STR_PAD_BOTH);
echo str_pad( "Binario",13,' ',STR_PAD_BOTH);
echo str_pad( "Char/Simbolo",5,' ',STR_PAD_BOTH);
echo PHP_EOL;
echo str_repeat('-',(13*4));
echo PHP_EOL;
foreach($array_de_chars as $char){
$binario = str_pad(decbin($char),8,'0',STR_PAD_LEFT);
echo str_pad( ' '.$char ,13,' ');
echo str_pad( ' x'.dechex($char) ,13,' ');
echo str_pad( ' '.$binario ,13,' ');
echo str_pad( ' '.chr($char) ,5,' ',STR_PAD_BOTH);
echo PHP_EOL;
}
echo PHP_EOL;
echo "</code></pre>".PHP_EOL;
}
y en tu codigo ya vees realmente lo que generaste
Código PHP:
$datos = "PROFIT1001 ";
function rand_string($data) {
$key_encript=" ";
$length = strlen($data);
for( $i = 0; $i < $length; $i++ ) {
$key_encript = $key_encript.fun(substr($data, $i, 1));
}
Return (Substr($key_encript, 1, strlen($key_encript)-1));
}
Function fun ($car){
Return (chr((((ord($car)+17)*11)%255)));
}
representacionAnsi(rand_string($datos));
y en pantalla te mostraria
Código HTML:
Ver originalDecimal HExadecimal Binario Char/Simbolo
----------------------------------------------------
47 x2f 00101111 /
69 x45 01000101 E
36 x24 00100100 $
192 xc0 11000000 �
225 xe1 11100001 �
91 x5b 01011011 [
216 xd8 11011000 �
205 xcd 11001101 �
205 xcd 11001101 �
216 xd8 11011000 �
29 x1d 00011101
29 x1d 00011101
29 x1d 00011101
y solo basta que obtengas los Valores correctos binarios o Hex, o decimales, que estan almacenados en el Campo de tu de base de datos