Array
(
)

Função de Criptografia? A..Z, 0..9

Erucci
   - 14 jan 2006

Boa Dia!

Eu estou a procura de um função de criptografia/descriptografia que me retorne apenas caracteres de A..Z ou 0..9

E que me retorne o mesmo número de caracteres da string que será passada para a função, assim por exemplo:

Senha:=Cript(´SENHA´) ->>>> Senha = ´ABCDE´

Se alguém puder me ajudar

Atenciosamente

Luís Erucci


Edilcimar
   - 14 jan 2006

Qualquer criptografia depende de mudança do caracter original para outro, vamos supor que vc crie uma criptografia simples, pega um caracter qualquer e soma 1 ao seu valor, se o valor é 1 ele transforma para 2, se é a ele transforma para b, aí eu pergunta se for z, você transforma em que? Vamos supor que o z vc transforme em x (caracter -1), e depois na hora de descriptografar, o x veio do z (-1) ou veio do x(+1)?


Erucci
   - 14 jan 2006

Bem, o Z poderia continuar sendo Z... ou algo assim, eu só precisava de uma função simples mesmo.... mas que fosse útil e funcionasse... eu posso fazer uma aqui... mas queria ver se alguém teria alguma idéia....


Aasn
   - 14 jan 2006

Fala garoto!

#Código

function Crypt(Action, Src: String): String;
label Fim;
var KeyLen : Integer;
KeyPos : Integer;
OffSet : Integer;
Dest,
Key : String;
SrcPos : Integer;
SrcAsc : Integer;
TmpSrcAsc : Integer;
Range : Integer;
begin
if (Src = ´´) Then
begin
Result:= ´´;
Goto Fim;
end;
Key := ´YUQL23KL23DF90WI5E1JAS467NMCXXL6JAOAUWWMCL0AOMM4A4VZYW9KHJUI2347EJHJKDF3424SKL K3LAKDJSL9RTIKJ´;

// ou apenas

Key := ´ABCDEF´;
Dest := ´´;
KeyLen := Length(Key);
KeyPos := 0;
SrcPos := 0;
SrcAsc := 0;
Range := 256;
if (Action = UpperCase(´C´)) then
begin
Randomize;
OffSet := Random(Range);
Dest := Format(´¬1.2x´,[OffSet]);
for SrcPos := 1 to Length(Src) do
begin
Application.ProcessMessages;
SrcAsc := (Ord(Src[SrcPos]) + OffSet) Mod 255;
if KeyPos < KeyLen then
KeyPos := KeyPos + 1
else
KeyPos := 1;
SrcAsc := SrcAsc Xor Ord(Key[KeyPos]);
Dest := Dest + Format(´¬1.2x´,[SrcAsc]);
OffSet := SrcAsc;
end;
end
Else if (Action = UpperCase(´D´)) then
begin
OffSet := StrToInt(´$´+ copy(Src,1,2));
SrcPos := 3;
repeat
SrcAsc := StrToInt(´$´+ copy(Src,SrcPos,2));
if (KeyPos < KeyLen) Then
KeyPos := KeyPos + 1
else
KeyPos := 1;
TmpSrcAsc := SrcAsc Xor Ord(Key[KeyPos]);
if TmpSrcAsc <= OffSet then
TmpSrcAsc := 255 + TmpSrcAsc - OffSet
else
TmpSrcAsc := TmpSrcAsc - OffSet;
Dest := Dest + Chr(TmpSrcAsc);
OffSet := SrcAsc;
SrcPos := SrcPos + 2;
until
(SrcPos >= Length(Src));
end;
Result:= Dest;
Fim:
end;



Dart
   - 15 jan 2006

AASN esse eh boa mas eh grande


Erucci tenta essa
Citação:
function Criptografia(mStr, mChave: string): string;
var
i, TamanhoString, pos, PosLetra, TamanhoChave: Integer;
begin
Result := mStr;
TamanhoString := Length(mStr);
TamanhoChave := Length(mChave);
for i := 1 to TamanhoString do
begin
pos := (i mod TamanhoChave);
if pos = 0 then
pos := TamanhoChave;
posLetra := ord(Result[i]) xor ord(mChave[pos]);
if posLetra = 0 then
posLetra := ord(Result[i]);
Result[i] := chr(posLetra);
end;
end;



Dart
   - 15 jan 2006


Citação:
AASN esse eh boa mas eh grande


Erucci tenta essa
Citação:

A função Criptografia pode ser usada para criptografar a senha acesso ao sistema. Ela é usada nos dois sentidos, para criptografar e descriptografar, desde que seja usada a mesma chave nas duas operações. ´mStr´ é a String que vai ser criptografada e ´mChave´ é a String que sera usada como base para fazer a criptografia.


function Criptografia(mStr, mChave: string): string;
var
i, TamanhoString, pos, PosLetra, TamanhoChave: Integer;
begin
Result := mStr;
TamanhoString := Length(mStr);
TamanhoChave := Length(mChave);
for i := 1 to TamanhoString do
begin
pos := (i mod TamanhoChave);
if pos = 0 then
pos := TamanhoChave;
posLetra := ord(Result[i]) xor ord(mChave[pos]);
if posLetra = 0 then
posLetra := ord(Result[i]);
Result[i] := chr(posLetra);
end;
end;



Erucci
   - 16 jan 2006

Muito obrigado pela atenção de vocês, porém minha dúvida não foi resolvida.

Eu já possuía essas 2 funções de criptografia, a primeira retorna um número grande de caracteres, sendo que eu preciso indicar uma string de 8 caracteres e a criptografia me retornar outra string com também 8 caracteres.

A segunda rotina não me traz apenas os caracteres de A..Z ou 0..9, sendo que eu preciso passar esse código via telefone.

Se alguém tiver mais alguma para me ajudar

Atenciosamente

Luís Erucci