Uma das melhores criptografias existentes no momento, a md5 e inquebravel ela so criptografa mais nao descriptografa, sendo que e uma seguranca a mais para o usuario e para o dono do software, pois pode ser usada em varias ocasioes, eu mesmo utilizo e aprovo, entao vim postar aqui para voces esta funcao, se caso nao conseguirem usar eu dou uma ajuda so postar um comentario ai.Obs : para que essa function possa funcionar precisa ter :A unit Wcrypt2.pas.no link abaixo voce encontra a unit necessariahttp://stuff.irsoft.de/CryptoAPI2.zipCodigo.:function TForm1.md5(const Input: String): String;var hCryptProvider: HCRYPTPROV; hHash: HCRYPTHASH; bHash: array[0..$7f] of Byte; dwHashLen: DWORD; pbContent: PByte; i: Integer;begin dwHashLen := 16; pbContent := Pointer(PChar(Input)); Result := ''; if CryptAcquireContext(@hCryptProvider, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT or CRYPT_MACHINE_KEYSET) then begin if CryptCreateHash(hCryptProvider, CALG_MD5, 0, 0, @hHash) then begin if CryptHashData(hHash, pbContent, Length(Input), 0) then begin if CryptGetHashParam(hHash, HP_HASHVAL, @bHash[0], @dwHashLen, 0) then begin for i := 0 to dwHashLen - 1 do begin Result := Result + Format('%.2x', [bHash[i]]); end; end; end; CryptDestroyHash(hHash); end; CryptReleaseContext(hCryptProvider, 0); end; Result := AnsiLowerCase(Result);end;Bom pessoal entao era isso que eu queria estar compartilhando com voces, ate a proxima postagem "Simular CheckBox no DBGrid, sempre foi algo muito trabalhoso,mas existe uma jeito simples e rapido de fazer essa simulacao."Adicione no formulario um: TDBGrid,TDataSource e TClientDataSet.-> O TDataSource e o TClientDataSet ambos estao na paleta Data Access.-> O TDBGrid esta na paleta Data Controls.No DBGrid1, para fazer a ligacao dele com o DataSource, em Propriedade faca:-> DataSource = DataSource1Para desativar o modo Edicao no DBGrid, na Propriedade Options faca:-> dgEdition = FalseNo DataSource1, para fazer ligacao dele com o ClientDataSet, em Propriedadefaca:-> DataSet = ClientDataSet1No ClientDataSet1, faca:-> de um duplo clique no ClientDataSet1, ou clique com o botao direito do mouse, e escolha a opcao Fields Editor ...Uma janela sera aberta.Na parte vazia (em branco) clique com o botao direito do mouse, e escolha a opcao NewField.Crie um campo com as seguintes caracteristicas:Tipo (type): StringTamanho (size): 1Nome (name): ATIVOApos o preenchimento, clique em OK, e em seguida feche a janela, onde o campo ATIVO estaaparecendo.Para Ativar o ClientDataSet:-> clique com o botao direito do mouse em ClientDataSet, e clique em Create DataSet.-> na Propriedade Active coloque como True.Se todos os procedimentos acima tiverem sido seguidos, nesse momento o campo ATIVO, ja aparecera no DBGrid.Em Eventos do DBGrid siga as instrucoes abaixo.Para Desenhar o CheckBox no DBGrid (use o procedimento DrawColumnCell do DBGrid):procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);varCheck: Integer;R: TRect;begin//Desenha um checkbox no dbgridif Column.FieldName = 'ATIVO' then beginDBGrid1.Canvas.FillRect(Rect);Check := 0;if ClientDataSet1Ativo.AsString = 'X' thenCheck := DFCS_CHECKEDelse Check := 0;R:=Rect;InflateRect(R,-2,-2); {Diminue o tamanho do CheckBox}DrawFrameControl(DBGrid1.Canvas.Handle,R,DFC_BUTTON, DFCS_BUTTONCHECK or Check);end;end;Para executar acao TRUE ou FALSE no CheckBox (use o procedimento CellClick do DBGrid):procedure TForm1.DBGrid1CellClick(Column: TColumn);beginClientDataSet1.Edit;if ClientDataSet1Ativo.AsString = 'X' thenClientDataSet1Ativo.AsString := ''else ClientDataSet1Ativo.AsString := 'X';ClientDataSet1.Post;end;Programa executando: "Ola galera olhando no site do programador online eu achei uma postagem muito interessante, entao decidir postar ela aqui pois muitos programadores nao entendem ainda tipos genericos em Delphi"Tipos Genericos (Generic Types ou Tipos de Parametros) foi adicionado a versao do Delphi 2009 a frente.Ele permite que