Accueil > Forum > > > > svp aidez moi à traduire ce code de c++ vers delphi
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
|
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
|
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
|
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
|
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
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|