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
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|