Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

vilneck

Código equivalente do C# para PHP

Recommended Posts

Bom dia galera, preciso utilizar um código que gera senhas em c# aqui na empresa, só que preciso fazer isso em php..

 

Preciso transformar código abaixo para php:

 

 public string SENHADODIA()
        {
            string res;
            string md5Data = getStringMD5(String.Format("Aps{0:yyyy.MM.dd}", DateTime.Now));
            md5Data = md5Data.ToUpper();
            res = md5Data.Substring(0, 5);
            return res;

        }
		
public string getStringMD5(string Source)
        {

            StringBuilder sb = new StringBuilder();

            Encoding u8 = Encoding.UTF8;
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(Source);
            byte[] hash = System.Security.Cryptography.MD5.Create().ComputeHash(inputBytes);


            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append(hash[i].ToString("X2"));
            }
            return sb.ToString();
        }

    }

 

Utilizando como exemplo o dia de hoje, 10/04/2017, em C a senha gerada é FD0C8

 

Em PHP tentei substituir a função getStringMD5 pela seguinte, porém foi sem sucesso... Ele gera abecf824ca0d5b9b4b843eea46c071ea e imagino que deveria geral pelo menos o fd0c8 no inicio... 

 

$byte='';
$string = date('Y.m.d');
//EQUIVALENTE AO INPUT BYTES
for($i = 0; $i < strlen($string); $i++)
{
   $byte .= ord($string[$i])."<br/>";
}
//FAZ O MD5 DO BYTE GERADO
 $hash = md5($byte);
 
 for ( $i = 0; $i < strlen($hash); $i++)
    {
		echo $var = (string)$hash[$i];
    }

 

Não entendo nada de C#, até li os comandos para tentar entender o código e fazer em php, porém não consegui, alguém consegue me dar uma luz ai nessa questão? 

 

Obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a necessidade em utilizar o mesmo padrão de senhas? Pois, em PHP, existe um biblioteca extremamente recomendada para tal feito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que esse feito em C# é mais antigo e usado em todos os aplicativos desktop, ai se eu fosse mudar a rotina que gera essa senha teria de atualizar todos eles, inviável devido a quantidade... Porém como só preciso informar essa senha em meu site, preciso gerar da mesma forma que o desktop...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais fácil criar uma API com C#, assim aproveitaria os mesmo objetos.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Enfime, seu código está com algumas diferenças básicas até algumas na forma de conversão interna da linguagem.  A primeira é o formato da data.

 

Esse é obtido no C#:

Citar

Aps2017.04.10

 

Esse é obtido no seu código:

Citar

2017.04.10

 

Outro ponto, é o MD5 dos bytes. Você está criando uma nova string e usando o MD5 nessa string. O C# percorre um array de bytes e cria um MD5 para cada byte. Que é o código abaixo, em C#:

byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(Source);

que você está realizando com a função ORD em PHP:

//EQUIVALENTE AO INPUT BYTES
for($i = 0; $i < strlen($string); $i++)
{
   $byte .= ord($string[$i])."<br/>";
}

Apesar de equivalente, é desnecessário. Isso apenas é necessário no C# para o tipo de resultado que se dejesa. o PHP já converte isso, pois, array de bytes, para o PHP, são strings. Apenas a string deve ser UTF-8.

 

E, por último, mas não menos importante. MD5 do PHP já em hexadecimal, logo, o código abaixo é desnecessário:

for (int i = 0; i < hash.Length; i++)
{
    sb.Append(hash[i].ToString("X2"));
}

Exceto pelo token "X", que define um hexadecimal maísculo com dois caracteres.

 

No final das constas, seu código se resume a isso:

$string = "Aps".date('Y.m.d');

$hash = strtoupper(md5($string));
O nível de segurança, com tal código, é baixo (para não dizer nulo).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.