Ir para conteúdo
SORTEIO MENSAL - ChatGPT 5 Plus, GTA V, NETFLIX e muito mais. ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

[Delphi] Sistema de Login com MySql (usando tabela do vBulletin)


~OwneR~
 Compartilhar

Posts Recomendados

Antes de qualquer coisa, este post é um "rascunho", não terá imagens por enquanto, nem os tutoriais de instalação, portanto se virem ou esperem eu postar =)

 

Por ser um "rascunho", ele não vai estar dividido por partes, quando eu for finalizar, irei separar em partes por SPOILER

 

No final do post eu coloco a source do meu projeto...

 

LEMBRE-SE QUE ESSE É UM POST DESTINADO AO VBULLETIN, SE VOCÊ USA OUTRA PLATAFORMA TERÁ QUE USAR DADOS DIFERENTES!

 

Oi galera, fazia tempo que eu não postava algo útil, hoje estou postando algo que é a dúvida de muitos membros do fórum, que querem fazer uma conexão entre o seu programa e seu servidor MySql para criar um sistema de login.

 

Se o seu objetivo não é criar um sistema de login, leia também, a solução para o seu problema será parecida =)

 

[RyokuseiMode ON]

Se você é um leecher/lammer/noob/whatever saia dessa página agora;

Se você só dá CTRL+C e CTR+V nos códigos saia dessa página agora;

Se você é daqueles que fazem perguntas idiotas antes de ler todo o tópico saia desta página agora;

Se você acha que eu copei isso de algum lugar saia dessa página agora e se mate;

[RyokuseiMode OFF]

 

Bom, fiquei a madrugada inteira pra entender porque estava dando errado a conversão desse código PHP de encriptar a senha do vBulletin para Delphi, só faltava um maldito LowerCase...:

<?php
$password = '123';
$salt = 'N3.5*DP|"GNydE;z0v[Co%e"aH>83+';
$hash = md5(md5($password).$salt);

echo $hash;
?>

begin
 PassWord := '123'
 Salt := 'N3.5*DP|"GNydE;z0v[Co%e"aH>83+';
 with TIdHashMessageDigest5.Create do begin
   PassWord := LowerCase(AsHex(HashValue(PassWord)));
   PassWord := LowerCase(AsHex(HashValue(PassWord+Salt)));
 end;
end;

 

Se sua forma de criptografar a senha for diferente, poste o método e eu converto pra você =)

Ex: $hash = md5($password.$salt);

 

Bom, chega de enrolação e vamos ao que interessa.

Primeiramente vocês precisarão de:

Conhecimento Básico de Web-Programação
Conhecimento Básico/Intermediário em Delphi

 

Nossas ferramentas serão:

Delphi (qualquer versão)
Zeos Lib (componente, vou passar o link)
LibMySql.dll (dll pra conectar com o server)
Um Banco de Dados MySql (pode ser local ou dedicado, tanto faz)
Um Fórum (para pegarmos a tabela de usuários, neste exemplo usarei o vBulletin -fórum da WebCheats-, você pode fazer com IPB ou qualquer outro)

Ah sim, se você não quiser fazer um sistema de login baseado nos usuários de um fórum, você pode criar uma tabela com os usuários e senhas...

 

Vamos ao que interessa =D

 

Baixe este componente: ZeosLib | Download ZeosLib software for free at SourceForge.net

Baixe esta DLL (incluso o .res da DLL): Download libmysql.rar from Sendspace.com - send big files the easy way

Tutorial de como instalar o Zeos Lib + Download

 

Para os que querem testar o código e não tem um servidor baixe tamém:

XAMPP 1.7.3 (51mb): Download XAMPP from SourceForge.net

vBulletin v4.1.0 Nulled - vBulletin.Suite.v4.1.0.Patch.Level.2.incl.KeyGen.[x-MoBiLe].Nulled.zip

 

Se for proibido postar Nulled Boards peço que um mod remova o download (=

 

NÃO VOU POSTAR AGORA O TUTORIAL DE COMO CONFIGURAR O XAMPP E INSTALAR O FORUM! OUTRA HORA EU POSTO NA ÁREA DE WEB-PROGRAMAÇÃO!

 

Finalmente temos o que precisamos \o/

Vá na palheta "Zeos Access" que acabou de ser criada (ou não), e adicione os componentes:

ZConnection (1°)

ZTable (4°)

Vá na palheta "Data Access" e adicione um DataSource.

 

Configure os componentes da seguinte forma:

ZConnection1:

Database: (o nome da DB do fórum)
HostName: localhost ou o endereço do servidor
PassWord: (senha do seu usuário MySql)
Port: 3306 (3306 é o padrão, altere se a sua for diferente)
Protocol: mysql-5
ReadOnly: True
User: (seu usuário MySql)

ZTable1:

Connection: ZConnection1
ReadOnly: True
TableName: user (padrão do vBulletin)

DataSource1:

DataSet: ZTable1

 

Pronto, agora os componentes estão configurados =)

Agora coloque o LibMySql.res na pasta do seu projeto e adicione esse código ao onCreate do form:

  if not FileExists('C:\Windows\System32\libmysql.dll') then
   with TResourceStream.Create(HInstance,'libmysql','dll') do
     SaveToFile('C:\Windows\System32\libmysql.dll');

 

Yay, está quase pronto =)

Agora adicione 2 Edits e 1 Button

O Edit1 será para o UserName e o Edit2 para o PassWord.

 

Acrescentei 2 blocos onde verifica se o usuário está banido, ou se ele tem posts insuficiente para usar o programa =)

 

uses IdHashMessageDigest;

var PassWord,PassHash,Salt: String;
begin
 ZConnection1.Connect;
 ZTable1.Active := True;
 if not ZTable1.Locate('username',Edit1.Text,[loCaseInsensitive]) then begin
   MessageBox(Handle,'Usuário não encontrado.'#13#13'Ainda não é registrado? Não perca tempo e registre-se agora!','ERRO! =(',16);
   Exit;
 end;
 if ZTable1.FieldValues['usergroupid'] = '8' then begin
   MessageBox(Handle,'Usuário banido!','ERRO!',16);
   Exit;
 end;
 if ZTable1.FieldValues['posts'] < '10' then begin
   MessageBox(Handle,'Posts insuficiente','ERRO!',16);
   Exit;
 end;
 PassWord := Edit2.Text;
 PassHash := ZTable1.FieldValues['password'];
 Salt := ZTable1.FieldValues['salt'];
 with TIdHashMessageDigest5.Create do begin
   PassWord := LowerCase(AsHex(HashValue(PassWord)));
   PassWord := LowerCase(AsHex(HashValue(PassWord+Salt)));
 end;
 ZConnection1.Disconnect;
 if PassWord = PassHash then begin
   //Bloco onde executa ação caso o usuário e a senha bata
 end;
end;

PS: 8 é a ID dos banidos no fórum que eu fiz em localhost, no seu fórum pode ser diferente =)

 

SOURCE

mysqlexemplo.png

 

[DOWN]MEGAUPLOAD - The leading online storage and file delivery service[/DOWN]

SCAN

 

Bom, isso é tudo pessoal, espero que tenham entendido tudo, e um feliz natal pra todos =)

 

Por favor não façam perguntas idiotas, escrevam com um português decente e com lógica, aí sim eu respondo ok?

Link para o comentário
Compartilhar em outros sites

Com sql e melhor tem como usar a tabela do vbulletin com o sql ?

 

Eu uso sem assim

 

Nome_Da_TQuery.Close;

Nome_Da_TQuery.SQL.Clear;

Nome_Da_TQuery.sql.add('SELECT * FROM Usuario WHERE Login_Usu='+ Quotedstr(EDIT_BOX.Text_OU_Nome_da_Variavel) +' AND Senha_USU=' + Quotedstr(EDIT_BOX.Text_OU_Nome_da_Variavel));

Nome_Da_TQuery.Prepare;

Nome_Da_TQuery.Open;

if Nome_Da_TQuery.Eof then begin

Messagebox(handle,'Usuário ou Senha incorettos','Erro!',16);

{Limpar os Edits}

end else begin

{feichar form de login e abrir mainform}

end;

Link para o comentário
Compartilhar em outros sites

ótimo tópico ~OwneR~ , perdi a conta de quantas pessoas tiveram duvidas sobre login, em relação a login aqui na wc :nerd:

 

Nunca mexi com componente zeos =X

e nem manjo mto mexer com forum e tals, mas, depois vo testar pra ver =X

 

@off:

faltou falar:

 

Se você não gosta de gatinhos, saia dessa página agora;

 

kospakSopakPSkSKop

 

flw, abraçs

Link para o comentário
Compartilhar em outros sites

  • 2 semanas atrás...

Desculpa a demora pra responder =(

 

@Surfistinha£

Dá sim cara, a diferença é que você tem que usar sintaxe MySql pra procurar.

Bom, eu não fiz com os componentes nativos porque aqui não conecta (dá erro na hora de carregar a dll...), mas com o Zeos funcionou (e achei mais fácil também ^^).

Dá pra você usar esse código seu sim, mas você terá de criptografar a senha do Edit pra ver se bate com a da DB, e claro modificar algumas coisas.

Como eu entendo pouca coisa não posso te dizer o que fazer, mas seria tipo isso:

SELECT salt AND password FROM user='blabla'

Aí basta criptografar a senha e comparar com a da DB

A criptografia de senha vBulletin é MD5(MD5($Password).$Salt)

 

@DragonBoss

Não coloquei porque não gosto de gatinhos ._."

Acho gatinho fofis e tal, mas gatinhos são falsos!!

---------------

Tutorial pra quem não sabe instalar o Zeos: http://www.webcheats.com.br/forum/delphi-vb/667167-delphi-instalando-zeoslib.html

 

Em breve um vídeo-tutorial de criar forum em localhost pra vocês testarem o código ^^

---------------

Ah sim, lembrando que é perigoso você deixar a senha assim "à mostra", já que ela pode ser pega facilmente com um Debugger ou Decompiler.

Bom, existe 2 métodos pra prevenir que alguém pegue sua senha e possa destruir seu banco de dados:

 

1° Método:

Fazer conexão com um intermediário via sockets, assim o cliente não acessaria a DB diretamente, apenas solicitaria para o servidor intermediário (é o mais seguro na minha opinião, mas o que dá mais trabalho...)

 

2° Método:

Criptografar a senha e usar um bom Crypter (WinLicense, VMProtect...). Dá menos trabalho pra fazer, mas um bom cracker pode conseguir a senha ^-^

Link para o comentário
Compartilhar em outros sites

~ Owner ~

 

aqui fala que não encontrou a database (meu forum) sendo que eu puis tudo corretamente...

 

 

e ali em "Database" tu fez backup ou exportou a db inteira ?

 

EDIT

 

Tem como tu explicar como fazer pra IPB por favor? digamos que tenmha que ter a mesma lógica do de vBulletin, libera se tiver X posts e se user ban não libera, tem como por favor D: ?

 

 

 

PLEASE

Link para o comentário
Compartilhar em outros sites

sumonee, você não tem que exportar a tabela não, e sim fazer uma conexão direta!

Se eu não me engano o hash do IPB é md5(md5(SALT).md5(PASS))

 

No Delphi seria:

  with TIdHashMessageDigest5.Create do begin
   MD5Password := LowerCase(AsHex(HashValue(PassWord)));
   MD5Salt := LowerCase(AsHex(HashValue(Salt)));
   Password := LowerCase(AsHex(HashValue(MD5Salt+MD5Password)));
 end;

*Adicione as variáveis MD5Password,MD5Salt: String;

 

Eu não tenho o IPB aqui, então não posso te dizer qual é a tabela de usuários, nem os campos que ficam os usuário/senha/número de posts/grupo de usuário.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas atrás...

Isso pode estar acontecendo por 2 motivos:

1° - O arquivo não existe (ele fica na pasta ZEOS\src\core)

 

2° - Você não declarou as pastas do Zeos na Library.

Veja o tutorial: http://www.webcheats.com.br/forum/delphi-vb/667167-delphi-instalando-zeoslib.html

Não se esqueça que você deve declarar todas essas pastas:

[color="Red"]<ZEOS>\packages\delphi<versão>
<ZEOS>\src\component
<ZEOS>\src\core
<ZEOS>\src\dbc
<ZEOS>\src\parsesql
<ZEOS>\src\plain[/color]

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.