vilneck 0 Denunciar post Postado Abril 10, 2017 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
Gabriel Heming 766 Denunciar post Postado Abril 10, 2017 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
vilneck 0 Denunciar post Postado Abril 10, 2017 É 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
Williams Duarte 431 Denunciar post Postado Abril 10, 2017 Mais fácil criar uma API com C#, assim aproveitaria os mesmo objetos. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Heming 766 Denunciar post Postado Abril 10, 2017 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