begin process at 2010 02 10 02:54:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Algorithme

 > 

Autre

 > 

svp aidez moi à traduire ce code de c++ vers delphi


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

svp aidez moi à traduire ce code de c++ vers delphi

dimanche 28 juin 2009 à 13:32:52 | svp aidez moi à traduire ce code de c++ vers delphi

fartotodz2004

Salut à tous je pense que le titre vous a donné une idée de ce que je veux
alors ... j'ai un code de l'algo xtea et xtea bloc decrypt mais écrit en c++ mais je le veux en delphi, j'ai pu traduire la moitier mais j'ai échoué dans la deuxième
voila le code
XTEA Block
---------------------------------------------------------------------------*/
void XTEA_Decrypt(BYTE* Buf, BYTE* Key)
{
DWORD v0, v1, delta, sum, k1, k2;
int i;

v0 = *((DWORD*)(Buf+0));
v1 = *((DWORD*)(Buf+4));
delta = 0x9E3779B9;
sum = 32 * delta;
for (int i=0; i<32; i++)
 {
  k1 = *((DWORD*)(Key+((sum>>9)& 0x0C)));
  v1-= (((v0<<4)^(v0>>5)) + v0)^(sum + k1);
  sum-=delta;
  k2 = *((DWORD*)(Key+((sum & 0x03)<<2)));
  v0-= (((v1<<4)^(v1>>5)) + v1)^(sum + k2);
 }
*((DWORD*)(Buf+0)) = v0;
*((DWORD*)(Buf+4)) = v1;
}
/*---------------------------------------------------------------------------
cbc buggy xtea function
---------------------------------------------------------------------------*/
void XTEA_Bloc_Decrypt(BYTE* Buf, DWORD Size, BYTE* Key)
{
BYTE* pBlock;
BYTE* pMask;

//Last 8 bytes aligned bloc
pBlock = Buf + ((Size - 8) & 0xFFFFFFF8);
if (Size>8)
 {
  for (DWORD i = 0; i<Size/8; i++)
   {
    //Choose IV
    if (pBlock!=Buf)
     pMask = pBlock - 8;
    else
     pMask = Buf+Size-8; //Last complete

    //xor block (buggy cbc-> should be done after decrypting)
    for (int j = 0; j<8; j++)
     pBlock[j] ^= pMask[j];

    //decrypt block
    XTEA_Decrypt(pBlock, Key);

    //next block
    pBlock-=8;
    }
  //decrypt again last block
  XTEA_Decrypt(pMask, Key);
  }
}
//---------------------------------------------------------------------------

et voila ce que j'ai écrit pour la première fonction...

TYPE
XTEABUF = array[0..1] of longword;
PXTEABUF = XTEABUF^
XTEAkey = array[0..3] of longword;
PXTEAkey = XTEAkey^
.
.
.
procedure XTEA_Decrypt(Buf:PXTEABUF;Key:PXTEAkey)
VAR
v0, v1, delta, sum, k1, k2 :longword;
i:integer;
begin
v0 := Buf[0];
v1 := Buf[1];
delta := $9E3779B9;
sum := 32 * delta;
for i := 0 to 31 do
begin
  k1 := Key[((sum>>9) and $C))];
  dec(v1,(((v0 shl 4) xor (v0 shr 5)) + v0)xor(sum + k1));
  dec(sum,delta);
  k2 := Key[((sum and 3) shl 2))];
  dec(v0,(((v1 shl 4) xor (v1 shr 5)) + v1) xor (sum + k2));
end;
buf[0] = v0;
buf[1] = v1;
end;

maintenant il me manque la 2eme partie de "cbc buggy xtea function"  svp chers membres aidez moi à traduire cette fonction ? j'attends vos propositions et merci à tous en avance

lundi 29 juin 2009 à 18:56:38 | Re : svp aidez moi à traduire ce code de c++ vers delphi

f0xi

Membre Club Administrateur CodeS-SourceS

unit XTeaCrypt;

interface

type
  pTeaBuffer = ^TTeaBuffer;
  TTeaBuffer = array[0..1] of LongWord;

  pTeaKey = ^TTeaKey;
  TTeaKey = array[0..3] of LongWord;

const
  SizeOfTeaBuffer = SizeOf(TTeaBuffer);
  SizeOfTeaKey    = SizeOf(TTeaKey);

function XTeaCryptStr(const Buffer, Key: AnsiString): AnsiString;
function XTeaDecryptStr(const Buffer, Key: AnsiString): AnsiString;

procedure XTeaCrypt(const Buffer, Key; const BufferSize, KeySize : integer; var Dest: array of byte);
procedure XTeaDecrypt(const Buffer, Key; const BufferSize, KeySize : integer; var Dest: array of byte);

procedure XTeaCryptOneShoot(var V: TTeaBuffer; const K: TTeaKey);
procedure XTeaDecryptOneShoot(var V: TTeaBuffer; const K: TTeaKey);

implementation

const
  _DELTA = $9E3779B9;
  _N     = 32;

type
  pArByte = ^ArByte;
  ArByte  = array[0..0] of byte;

procedure XTeaCryptOneShoot(var V: TTeaBuffer; const K: TTeaKey);
var
  I: LongWord;
  S: Int64;
begin
  S := 0;
  for I := 0 to _N-1 do
  begin
    Inc(V[0], ((V[1] shl 4) xor (V[1] shr 5)) + (V[1] xor S) + K[S and 3]);
    Inc(S, _DELTA);
    Inc(V[1], ((V[0] shl 4) xor (V[0] shr 5)) + (V[0] xor S) + K[(S shr 11) and 3]);
  end;
end;

procedure XTeaDecryptOneShoot(var V: TTeaBuffer; const K: TTeaKey);
var
  I: LongWord;
  S: Int64;
begin
  S := DELTA * Int64(_N);
  for I := 0 to _N-1 do
  begin
    Dec(V[1], ((V[0] shl 4) xor (V[0] shr 5)) + (V[0] xor S) + K[(S shr 11) and 3]);
    Dec(S, _DELTA);
    Dec(V[0], ((V[1] shl 4) xor (V[1] shr 5)) + (V[1] xor S) + K[S and 3]);
  end;
end;

procedure XTeaCrypt(const Buffer, Key; const BufferSize, KeySize : integer; var Dest: array of byte);
var
  pB, pK : pArByte;
  V: TTeaBuffer;
  K: TTeaKey;
  I, L, N: Integer;
begin
  pB := pArByte(Buffer);
  pK := pArByte(Key);

  L := KeySize;
  if L > SizeOfTeaKey then
    L := SizeOfTeaKey;

  K[0] := 0;
  K[1] := 0;
  K[2] := 0;
  K[3] := 0;
  Move(pK^[0], K[0], L);

  I := 1;
  L := BufferSize;

  if L > 0 then
    SetLength(Dest, ((L-1) div SizeOfTeaBuffer+1) * SizeOfTeaBuffer)
  else
    SetLength(Dest, 0);

  while I <= L do
  begin
    V[0] := 0;
    V[1] := 0;

    N := L - I + 1;

    if N > SizeOfTeaBuffer then
      N := SizeOfTeaBuffer;

    Move(pB^[I], V[0], N);

    XTeaCryptOneShoot(V, K);

    Move(V[0], Dest[I], SizeOfTeaBuffer);
    Inc(I, SizeOfTeaBuffer);
  end;
end;

procedure XTeaDecrypt(const Buffer, Key; const BufferSize, KeySize : integer; var Dest: array of byte);
var
  pB, pK : pArByte;
  V: TTeaBuffer;
  K: TTeaKey;
  I, L, N: Integer;
begin
  pB := pArByte(Buffer);
  pK := pArByte(Key);

  L := KeySize;

  if L > SizeOfTeaKey then
    L := SizeOfTeaKey;

  K[0] := 0;
  K[1] := 0;
  K[2] := 0;
  K[3] := 0;
  Move(pK^[0], K[0], L);

  I := 1;
  L := BufferSize;

  if L > 0 then
    SetLength(Dest, ((L-1) div SizeOfTeaBuffer+1) * SizeOfTeaBuffer)
  else
    SetLength(Dest, 0);

  while I <= L do
  begin
    V[0] := 0;
    V[1] := 0;

    N := L - I + 1;

    if N > SizeOfTeaBuffer then
      N := SizeOfTeaBuffer;

    Move(pB^[I], V[0], N);

    XTeaDecryptOneShoot(V, K);

    Move(V[0], Dest[I], SizeOfTeaBuffer);

    Inc(I, SizeOf(V))
  end;
end;


function XTeaCryptStr(const Buffer, Key: AnsiString): AnsiString;
var
  V: TTeaBuffer;
  K: TTeaKey;
  I, L, N: Integer;
begin
  L := Length(Key);
  if L > SizeOfTeaKey then
    L := SizeOfTeaKey;

  K[0] := 0;
  K[1] := 0;
  K[2] := 0;
  K[3] := 0;
  Move(Key[1], K[0], L);

  I := 1;
  L := Length(Buffer);

  if L > 0 then
    SetLength(Result, ((L-1) div SizeOfTeaBuffer+1) * SizeOfTeaBuffer)
  else
    SetLength(Result, 0);

  while I <= L do
  begin
    V[0] := 0;
    V[1] := 0;

    N := L - I + 1;

    if N > SizeOfTeaBuffer then
      N := SizeOfTeaBuffer;

    Move(Buffer[I], V[0], N);

    XTeaCryptOneShoot(V, K);

    Move(V[0], Result[I], SizeOfTeaBuffer);
    Inc(I, SizeOfTeaBuffer);
  end;
end;

function XTeaDecryptStr(const Buffer, Key: AnsiString): AnsiString;
var
  V: TTeaBuffer;
  K: TTeaKey;
  I, L, N: Integer;
begin
  L := Length(Key);

  if L > SizeOfTeaKey then
    L := SizeOfTeaKey;

  K[0] := 0;
  K[1] := 0;
  K[2] := 0;
  K[3] := 0;
  Move(Key[1], K[0], L);

  I := 1;
  L := Length(Buffer);
  if L > 0 then
    SetLength(Result, ((L-1) div SizeOfTeaBuffer+1) * SizeOfTeaBuffer)
  else
    SetLength(Result, 0);

  while I <= L do
  begin
    V[0] := 0;
    V[1] := 0;

    N := L - I + 1;

    if N > SizeOfTeaBuffer then
      N := SizeOfTeaBuffer;

    Move(Buffer[I], V[0], N);

    XTeaDecryptOneShoot(V, K);

    Move(V[0], Result[I], SizeOfTeaBuffer);

    Inc(I, SizeOfTeaBuffer)
  end;
end;

end.






lundi 29 juin 2009 à 23:31:53 | Re : svp aidez moi à traduire ce code de c++ vers delphi

DRJEROME

Salut,

il y a aussi ça http://www.shokhirev.com/nikolai/programs/code/Cryptography/uTeaSet_pas.html

DrJerome
lundi 20 juillet 2009 à 18:12:38 | Re : svp aidez moi à traduire ce code de c++ vers delphi

fartotodz2004

j'ai tous vu mais je cherche la traduction exacte de mon code pck ya des choz spécial dans ce code svp aidez moi à le traduire

lundi 20 juillet 2009 à 19:01:47 | Re : svp aidez moi à traduire ce code de c++ vers delphi

f0xi

Membre Club Administrateur CodeS-SourceS



regarde mon message c'est la trad de ton truc.




mardi 21 juillet 2009 à 10:23:33 | Re : svp aidez moi à traduire ce code de c++ vers delphi

fartotodz2004

merci foxi voila ce que je cherche XTEA_Bloc_Decrypt mais tu as ajouté XTeaDecryptStr !!! ce n'est pas présent dans mon code

mardi 21 juillet 2009 à 10:24:49 | Re : svp aidez moi à traduire ce code de c++ vers delphi

fartotodz2004

en plus j'ai trouvé des erreurs sur delphi 6 alors svp compile ton code et réponds moi

mardi 21 juillet 2009 à 19:32:41 | Re : svp aidez moi à traduire ce code de c++ vers delphi

f0xi

Membre Club Administrateur CodeS-SourceS

Code Delphi :


unit XTeaCrypt;

interface

uses Windows, SysUtils;

type
pBytes = ^Bytes;
Bytes = array of byte;

pTeaBuffer = ^TTeaBuffer;
TTeaBuffer = array[0..1] of LongWord;

pTeaKey = ^TTeaKey;
TTeaKey = array[0..3] of LongWord;

const
SizeOfTeaBuffer = SizeOf(TTeaBuffer);
SizeOfTeaKey = SizeOf(TTeaKey);

procedure XTea_Bloc_Crypt(var V: TTeaBuffer; const K: TTeaKey);
procedure XTea_Bloc_Decrypt(var V: TTeaBuffer; const K: TTeaKey);

procedure XTea_Crypt(const Buffer, Key; const BufferSize, KeySize : integer; var Dest: pBytes);
procedure XTea_Decrypt(const Buffer, Key; const BufferSize, KeySize : integer; var Dest: pBytes);

function XTea_Crypt_Str(const Buffer, Key: AnsiString): AnsiString;
function XTea_Decrypt_Str(const Buffer, Key: AnsiString): AnsiString;


implementation

const
_DELTA = $9E3779B9;
_N = 32;

type
pArByte = ^ArByte;
ArByte = array[0..0] of byte;

procedure XTea_Bloc_Crypt(var V: TTeaBuffer; const K: TTeaKey);
var
I: LongWord;
S: Int64;
begin
S := 0;
for I := 0 to _N-1 do
begin
Inc(V[0], ((V[1] shl 4) xor (V[1] shr 5)) + (V[1] xor S) + K[S and 3]);
Inc(S, _DELTA);
Inc(V[1], ((V[0] shl 4) xor (V[0] shr 5)) + (V[0] xor S) + K[(S shr 11) and 3]);
end;
end;

procedure XTea_Bloc_Decrypt(var V: TTeaBuffer; const K: TTeaKey);
var
I: LongWord;
S: Int64;
begin
S := _DELTA * Int64(_N);
for I := 0 to _N-1 do
begin
Dec(V[1], ((V[0] shl 4) xor (V[0] shr 5)) + (V[0] xor S) + K[(S shr 11) and 3]);
Dec(S, _DELTA);
Dec(V[0], ((V[1] shl 4) xor (V[1] shr 5)) + (V[1] xor S) + K[S and 3]);
end;
end;

procedure XTea_Crypt(const Buffer, Key; const BufferSize, KeySize : integer; var Dest: pBytes);
var
pB, pK : pArByte;
V: TTeaBuffer;
K: TTeaKey;
I, L, N: Integer;
begin
pB := pArByte(Buffer);
pK := pArByte(Key);

L := KeySize;
if L > SizeOfTeaKey then
L := SizeOfTeaKey;

K[0] := 0;
K[1] := 0;
K[2] := 0;
K[3] := 0;
Move(pK^[0], K[0], L);

I := 1;
L := BufferSize;

if L > 0 then
SetLength(Dest^, ((L-1) div SizeOfTeaBuffer+1) * SizeOfTeaBuffer)
else
exit;

while I <= L do
begin
V[0] := 0;
V[1] := 0;

N := L - I + 1;

if N > SizeOfTeaBuffer then
N := SizeOfTeaBuffer;

Move(pB^[I], V[0], N);

XTea_Bloc_Crypt(V, K);

Move(V[0], Dest^[I], SizeOfTeaBuffer);
Inc(I, SizeOfTeaBuffer);
end;
end;

procedure XTea_Decrypt(const Buffer, Key; const BufferSize, KeySize : integer; var Dest: pBytes);
var
pB, pK : pArByte;
V: TTeaBuffer;
K: TTeaKey;
I, L, N: Integer;
begin
pB := pArByte(Buffer);
pK := pArByte(Key);

L := KeySize;

if L > SizeOfTeaKey then
L := SizeOfTeaKey;

K[0] := 0;
K[1] := 0;
K[2] := 0;
K[3] := 0;
Move(pK^[0], K[0], L);

I := 1;
L := BufferSize;

if L > 0 then
SetLength(Dest^, ((L-1) div SizeOfTeaBuffer+1) * SizeOfTeaBuffer)
else
exit;

while I <= L do
begin
V[0] := 0;
V[1] := 0;

N := L - I + 1;

if N > SizeOfTeaBuffer then
N := SizeOfTeaBuffer;

Move(pB^[I], V[0], N);

XTea_Bloc_Decrypt(V, K);

Move(V[0], Dest^[I], SizeOfTeaBuffer);

Inc(I, SizeOf(V))
end;
end;


function XTea_Crypt_Str(const Buffer, Key: AnsiString): AnsiString;
var
V: TTeaBuffer;
K: TTeaKey;
I, L, N: Integer;
begin
L := Length(Key);
if L > SizeOfTeaKey then
L := SizeOfTeaKey;

K[0] := 0;
K[1] := 0;
K[2] := 0;
K[3] := 0;
Move(Key[1], K[0], L);

I := 1;
L := Length(Buffer);

if L > 0 then
SetLength(Result, ((L-1) div SizeOfTeaBuffer+1) * SizeOfTeaBuffer)
else
SetLength(Result, 0);

while I <= L do
begin
V[0] := 0;
V[1] := 0;

N := L - I + 1;

if N > SizeOfTeaBuffer then
N := SizeOfTeaBuffer;

Move(Buffer[I], V[0], N);

XTea_Bloc_Crypt(V, K);

Move(V[0], Result[I], SizeOfTeaBuffer);
Inc(I, SizeOfTeaBuffer);
end;
end;

function XTea_Decrypt_Str(const Buffer, Key: AnsiString): AnsiString;
var
V: TTeaBuffer;
K: TTeaKey;
I, L, N: Integer;
begin
L := Length(Key);

if L > SizeOfTeaKey then
L := SizeOfTeaKey;

K[0] := 0;
K[1] := 0;
K[2] := 0;
K[3] := 0;
Move(Key[1], K[0], L);

I := 1;
L := Length(Buffer);
if L > 0 then
SetLength(Result, ((L-1) div SizeOfTeaBuffer+1) * SizeOfTeaBuffer)
else
SetLength(Result, 0);

while I <= L do
begin
V[0] := 0;
V[1] := 0;

N := L - I + 1;

if N > SizeOfTeaBuffer then
N := SizeOfTeaBuffer;

Move(Buffer[I], V[0], N);

XTea_Bloc_Decrypt(V, K);

Move(V[0], Result[I], SizeOfTeaBuffer);

Inc(I, SizeOfTeaBuffer)
end;
end;

end.




vendredi 24 juillet 2009 à 18:49:03 | Re : svp aidez moi à traduire ce code de c++ vers delphi

fartotodz2004

merci f0xi je vais tester l'unité et te répondre



Cette discussion est classée dans : key, sum, buf, v0, xtea


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec les touches [ par g0belin ] Voila j'ai un probleme...Je voudrait que quand la touche 38 (touche du haut) est enfoncee ou appuyer que la variable direction soit 'h'--------------- Forme Hexa des virtual key codes [ par Manthis ] Salut,Je voudrais savoir comment ecrire la valeur hexa des virtual key codes.MerciManthis foreign key(interbase) sous delphi6 [ par Jolapatat ] Salut, Voila j'ai un piti probleme, si si je vous jure que c vrai. voila en fait j'ai une table "composants" ki contient entre autre un champs "ctype" OnKeyPress les constantes ne sont pas reconnues [ par MasterJ ] Salut sur l'event onKeyPress, je fais ceci : if not(Key in ['0'..'9','.',Key_Return,Key_Backspace]) then Key:=#0;j'ai pourtant bien importer le unit q changement de la bd de reference [ par choup ] Quelque chose de bizarre pour moi :j'ai un formulaire qui a un objet "requete" : QTravaux qui utilise comme bd "travaux" et je voudrai remplacer la bd Tjrs on keyPress les touches F? [ par MasterJ ] Comment peut on trapper une touche F9 par exemple. J'essaie if (key=char(VK_F9)) then do something...;sans succesaussi pourquoi dans l'aide de delphi pb avec pointeur [ par moffer ] voila je suis un peu nouveau sur delphi et je me demande pourquoi ce code ne fonctionne pasprocedure TForm1.Button1Click(Sender: TObject);var Buf: St Key":Identificateur non déclaré !!! [ par TriplePattes ] Bonjour à tous , Voilà , lorsque je tape "key" sous DELPHI3 , il me répond: identificateur non déclaré!Est-ce dû au fait qu'il s'agit de la version 3 Copie key dans un txt ? Tres important svp ! [ par Alldonkey ] Lu all voila je voudrai creer un tout petit programme qui des qui souvre il copie un endroit de la base de registre (deja choisie dans le projet) dans TWMHotKey [ par husleagd ] Bonjour à tous,Dans FormCreate je fais: RegisterHotkey(Self.Handle, HOT_KEY_ID, MOD_CONTROL or MOD_ALT, Ord('T'));dans FormClose: UnregisterHot


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales