[SP-pm] md5_base64

Andre Carneiro andregarciacarneiro at gmail.com
Wed May 6 09:32:35 PDT 2009


Só complementando a frase 'Mas o lance dos ifs, é só mais um jeito de fazer
a mesma coisa, só q de maneira mais resumida, para facilitar.'. O
'facilitar' refere-se a casos em que você tem poucas condições dentro do if.
Quando você tiver muitas expressões, ou várias expressões para comparar com
as condições dentro desse tipo de if, é preferível você usar o if
'tradicional' ...


Cheers!
.

2009/5/6 Andre Carneiro <andregarciacarneiro at gmail.com>

> Não posso te ajudar muito com o problema de md5_base64, porque nunca usei.
>
> Mas o lance dos ifs, é só mais um jeito de fazer a mesma coisa, só q de
> maneira mais resumida, para facilitar.
> .
> .
> .
> #Exemplo cretino...
> $var = '1' if $var > 1;
>
> é a mesma coisa que
>
> if($var >1){
>     $var = 1;
> }
>
> O primeiro if é uma opção q se tem em Perl, para não precisar usar '{ }'.
> Não sei ao certo se esse tipo de coisa é recomendável usar. Mas pela sua
> reação, imagino que não seja, pois não ficou muito claro pra você.
>
> Repare que no primeiro if eu também omiti parênteses. É uma coisa que
> podemos fazer em Perl também.
>
>
>
>
> Se tiver mais dúvidas, tente colocar o mais detalhadamente possível ok?
>
>
> Até mais!
>
>
>
> 2009/5/6 Carlos Eduardo Langoni <ce.langoni at gmail.com>
>
> Amigos,
>>
>> Como disse inicialmente pra vocês estou iniciando em perl com o
>> objetivo de fazer algumas modificações em um sistema chamado nocat,
>> com o objetivo de integra-lo a uma solução que estou desenvolvendo.
>>
>> O sistema está feito em php+mysql e o nocat em perl, no fim das contas
>> estou usando php, perl e shell script (com pretenção futura de remover
>> o shell e substituir por puro perl).
>>
>> Tudo caminhava muito bem na parte de php e shell, até mesmo a parte
>> que eu precisaria mexer em perl já estava acertada, mas nada hora de
>> testar o sistema completo (essas coisas sempre acontecem no final)
>> tive problemas com a autenticação do usuário :( o nocat (perl) não
>> consegue interpretar a senha q eu salvo usando o php :(
>>
>> Fuçando no fonte do nocat atrás de descobrir a forma de encriptação
>> utilizada (que inicialmente achei que fosse md5) eu encontrei uma
>> chamada a uma função chamada md5_base64.
>>
>> Ele começa as referências a md5_base64 no começo do arquivo DBI.pm
>> onde encontro:
>> use Digest::MD5 qw( md5_base64 );
>>
>> mais abaixo no mesmo arquivo eu encontro:
>> $user->set_password( md5_base64( $user->passwd ), 1 ) if
>> $user->changed_password;
>> (talvez eu esteja acostumado de mais com identação, mas esta linha não
>> fez mto sentido pra mim)
>> Esta linha faz parte do seguinte bloco:
>> sub check_password {
>>    my ($self, $user) = @_;
>>    # MD5 the password if it's not already MD5'd, prior to actually using
>> it.
>>    $user->set_password( md5_base64( $user->passwd ), 1 ) if
>> $user->changed_password;
>>    return $user->passwd;
>> }
>>
>> e depois ainda tem:
>> return md5_base64( $user_pw ) eq $stored_pw;
>> como parte do bloco:
>> sub authenticate_user {
>>    my ($self, $user_pw, $user) = @_;
>>    my $stored_pw = $self->check_password( $user );
>>    return md5_base64( $user_pw ) eq $stored_pw;
>> }
>>
>> Na primeira vez que analisei o código para ver qual o método de
>> encriptação era utilizado para as senhas eu acreditei que fosse md5,
>> mas depois percebi que o hash gerado por ele não se parece em nada com
>> md5, aí encontrei a função crypt como parte do seguinte bloco:
>>
>> sub md5_hash {
>>    my ( $self, $string, $salt ) = @_;
>>
>>    unless ( $salt ) {
>>        my @chars = ( "0".."9", "a".."z", "A".."Z", ".", "/" );
>>        $salt  = "";
>>        $salt .= @chars[int rand @chars] for ( 1 .. 8 );
>>    }
>>
>>    $salt = '$1$' . substr( $salt, 0, 8 ) if $salt !~ /^\$1\$/o;
>>
>>    return crypt( $string, $salt );
>> }
>>
>> E analisando a url http://www.osix.net/modules/article/?id=571
>> acreditei que fosse DES-std, mas nenhuma das formas que testei com php
>> conseguiu gerar uma senha que o nocat conseguisse interpretar.
>>
>> Uma coisa que me deixa encucado, sem entender direito, são esses IFs
>> na rente de linhas como  $salt = '$1$' . substr( $salt, 0, 8 ) if
>> $salt !~ /^\$1\$/o;
>>
>> Tem algum companheiro na lista que pode me ajudar a entender tudo isso?
>>
>> Obrigado a todos desde já!
>> Abraços
>> Kadu
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm at pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>
>
>
> --
> André Garcia Carneiro
> Analista/Desenvolvedor Perl
>
>


-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20090506/dd7c4d08/attachment-0001.html>


More information about the SaoPaulo-pm mailing list