CONVERTE UMA FUN?ÃO
TENHO UMA FUNÇÃO EM VB6 E ESTOU TENTANDO CONVERTER PRA DELPHI ALGUEM PODE ME AJUDAR
FUNÇÃO EM VB
Public Function CriptSenha(Psenha As String) As Variant
Const MIN_ASC = 32
Const MAX_ASC = 126
Const NUM_ASC = MAX_ASC - MIN_ASC + 1
Chave = 2001 [ô][ô]qualquer nº para montar o algorÃtimo da criptografia
Dim Offset As Long
Dim str_len As Integer
Dim i As Integer
Dim ch As Integer
[ô]3873092
to_text = [Ô][Ô]
Offset = 3873092 [ô]NumericPassword(Chave)
Rnd -1
Randomize Offset
str_len = Len(Psenha)
For i = 1 To str_len
ch = Asc(Mid$(Psenha, i, 1))
If ch >= MIN_ASC And ch <= MAX_ASC Then
ch = ch - MIN_ASC
Offset = Int((NUM_ASC + 1) * Rnd)
ch = ((ch + Offset) Mod NUM_ASC)
ch = ch + MIN_ASC
[ô]novo
[ô]to_text = to_text & Chr$(ch)
If Chr$(ch) = [Ô][ô][Ô] Then
to_text = to_text & [Ô]'[Ô]
Else
to_text = to_text & Chr$(ch)
End If
End If
Next i
CriptSenha = to_text
End Function
CHEGUEI ATE AQUI
Function CriptSenha(Psenha : String) : String;
Const MIN_ASC = 32
Const MAX_ASC = 126
Const NUM_ASC = MAX_ASC - MIN_ASC + 1
var
Chave, i,x, ch : Integer;
Offset:longint;
//3873092
Chave := 2001; //qualquer nº para montar o algorÃtimo da criptografia
Offset := NumericPassword(Chave); // <- quem é NumericPassword
[txt-color=#e80000]rnd := -1[/txt-color]; // delphi não permite este comando para isso é usado o randseed(); logo a seguir
//x :=256; // possivel falha na compatibilidade do random no vb e delphi esteja em achar x sastifatorio para ambas lingaguem
result := [Ô][Ô];
randseed(Offset); // subistituto do randomize(Offset) do vb
For i := 1 To length(Psenha) do
begin
ch := ord(Psenha[i]);
If (ch >= MIN_ASC) And (ch <= MAX_ASC) Then
ch := ch - MIN_ASC ;
[txt-color=#e80000] Offset := (NUM_ASC + 1) * Random(x);[/txt-color] // rnd em vb pode ser chamado sem argumento em delphi não
ch := ((ch + Offset) Mod NUM_ASC);
ch := ch + MIN_ASC;
// novo
// result := result + Chr(ch);
If Chr(ch) = [Ô][ô][Ô]
Then result := result + [Ô]'[Ô]
Else result := result + Chr$(ch);
end;
end;
FUNÇÃO EM VB
Public Function CriptSenha(Psenha As String) As Variant
Const MIN_ASC = 32
Const MAX_ASC = 126
Const NUM_ASC = MAX_ASC - MIN_ASC + 1
Chave = 2001 [ô][ô]qualquer nº para montar o algorÃtimo da criptografia
Dim Offset As Long
Dim str_len As Integer
Dim i As Integer
Dim ch As Integer
[ô]3873092
to_text = [Ô][Ô]
Offset = 3873092 [ô]NumericPassword(Chave)
Rnd -1
Randomize Offset
str_len = Len(Psenha)
For i = 1 To str_len
ch = Asc(Mid$(Psenha, i, 1))
If ch >= MIN_ASC And ch <= MAX_ASC Then
ch = ch - MIN_ASC
Offset = Int((NUM_ASC + 1) * Rnd)
ch = ((ch + Offset) Mod NUM_ASC)
ch = ch + MIN_ASC
[ô]novo
[ô]to_text = to_text & Chr$(ch)
If Chr$(ch) = [Ô][ô][Ô] Then
to_text = to_text & [Ô]'[Ô]
Else
to_text = to_text & Chr$(ch)
End If
End If
Next i
CriptSenha = to_text
End Function
CHEGUEI ATE AQUI
Function CriptSenha(Psenha : String) : String;
Const MIN_ASC = 32
Const MAX_ASC = 126
Const NUM_ASC = MAX_ASC - MIN_ASC + 1
var
Chave, i,x, ch : Integer;
Offset:longint;
//3873092
Chave := 2001; //qualquer nº para montar o algorÃtimo da criptografia
Offset := NumericPassword(Chave); // <- quem é NumericPassword
[txt-color=#e80000]rnd := -1[/txt-color]; // delphi não permite este comando para isso é usado o randseed(); logo a seguir
//x :=256; // possivel falha na compatibilidade do random no vb e delphi esteja em achar x sastifatorio para ambas lingaguem
result := [Ô][Ô];
randseed(Offset); // subistituto do randomize(Offset) do vb
For i := 1 To length(Psenha) do
begin
ch := ord(Psenha[i]);
If (ch >= MIN_ASC) And (ch <= MAX_ASC) Then
ch := ch - MIN_ASC ;
[txt-color=#e80000] Offset := (NUM_ASC + 1) * Random(x);[/txt-color] // rnd em vb pode ser chamado sem argumento em delphi não
ch := ((ch + Offset) Mod NUM_ASC);
ch := ch + MIN_ASC;
// novo
// result := result + Chr(ch);
If Chr(ch) = [Ô][ô][Ô]
Then result := result + [Ô]'[Ô]
Else result := result + Chr$(ch);
end;
end;
Não sei se aqui alguém programa em delphi amigo, se fosse o inverso seria mais fácil.
Você pode usar outras funções
http://www.planetadelphi.com.br/dica/7583/-funcao-para-criptografar-e-descriptografar-uma-string-
http://www.planetadelphi.com.br/dica/7583/-funcao-para-criptografar-e-descriptografar-uma-string-
AMIGO OBRIGADO, MAS O CASO E TENHO UM SISTEMA EM VB6 QUE USA ESSA FUNÇÃO, E ESTOU DESENVOLVENDO UM APLICATIVO PRA ANDROID E PRECISO DELA EM DELPHI, SE NAO TENHO QUE REFAZER NO MEU SISTEMA.
MAS DESDE JA AGRADEÇO MUITO PELA SUA ATENÇÃO,
Rnd -1
Randomize Offset
Offset = Int((NUM_ASC + 1) * Rnd)
ESTAS 3 LINHAS
MAS DESDE JA AGRADEÇO MUITO PELA SUA ATENÇÃO,
Rnd -1
Randomize Offset
Offset = Int((NUM_ASC + 1) * Rnd)
ESTAS 3 LINHAS
Você pode usar outras funções
http://www.planetadelphi.com.br/dica/7583/-funcao-para-criptografar-e-descriptografar-uma-string-
http://www.planetadelphi.com.br/dica/7583/-funcao-para-criptografar-e-descriptografar-uma-string-
Citação:Offset := (NUM_ASC + 1) * Random(x); // rnd em vb pode ser chamado sem argumento em delphi não
No VB, quando você usa RND(), ele gera um decimal de 0 até 1 aleatoriamente, baseado no valor da semente de aleatoriedade.
Para ter o mesmo efeito em Delphi, use:
var
decimalAleatorio: single;
Begin
decimalAleatorio:= Random;
...
Se você precisa que o resultado da função em Delphi seja exatamente o mesmo da em VB6 então sinto lhe informar que isso não é possÃvel
Digo isso pelo seguinte, analisando o seu código em VB6 vejo você usando
Randomize Offset
Sendo esse Offset usado basicamente como uma chave, o que isso faz é iniciar o gerador de número pseudo aleatório do VB6 com uma semente de forma que sempre que você chamar essa função com o mesmo valor as chamadas a função Rnd em seguida vão gerar sempre a mesma sequencia de números aleatórios, e é isso que você não vai conseguir, gerar no Delphi a mesma sequencia que o VB6 gera.
Agora se não precisa ser compatÃvel com VB6, se o resultado pode ser diferente então o seu problema se resume a converter a linha
Offset = Int((NUM_ASC + 1) * Rnd)
Então é uma questão de entender o que esta linha faz.
Basicamente você está gerando um número aleatório entre 0 e NUM_ASC, se for isso então em Delphi seria
Offset := Random(NUM_ASC + 1);
Como a função Random em delphi já retorna um inteiro entre 0 e o número passado, então não precisa fazer a multiplicação
Digo isso pelo seguinte, analisando o seu código em VB6 vejo você usando
Randomize Offset
Sendo esse Offset usado basicamente como uma chave, o que isso faz é iniciar o gerador de número pseudo aleatório do VB6 com uma semente de forma que sempre que você chamar essa função com o mesmo valor as chamadas a função Rnd em seguida vão gerar sempre a mesma sequencia de números aleatórios, e é isso que você não vai conseguir, gerar no Delphi a mesma sequencia que o VB6 gera.
Agora se não precisa ser compatÃvel com VB6, se o resultado pode ser diferente então o seu problema se resume a converter a linha
Offset = Int((NUM_ASC + 1) * Rnd)
Então é uma questão de entender o que esta linha faz.
Basicamente você está gerando um número aleatório entre 0 e NUM_ASC, se for isso então em Delphi seria
Offset := Random(NUM_ASC + 1);
Como a função Random em delphi já retorna um inteiro entre 0 e o número passado, então não precisa fazer a multiplicação
Tópico encerrado , respostas não são mais permitidas