Quelqu'un connaît l'implémentation correcte de Python de TEA (Tiny Encryption Algorithm)? J'ai essayé celui que j'ai trouvé ici: http://sysadminco.com/code/python-tea/ - mais il ne semble pas fonctionner correctement.Implémentation Python TEA
Il renvoie des résultats différents des autres implémentations en C ou en Java. Je suppose que c'est causé par des types de données complètement différents dans python (ou pas de types de données en fait).
Voici le code et un exemple:
def encipher(v, k):
y=v[0];z=v[1];sum=0;delta=0x9E3779B9;n=32
w=[0,0]
while(n>0):
y += (z << 4^z >> 5) + z^sum + k[sum & 3]
y &= 4294967295L # maxsize of 32-bit integer
sum += delta
z += (y << 4^y >> 5) + y^sum + k[sum>>11 & 3]
z &= 4294967295L
n -= 1
w[0]=y; w[1]=z
return w
def decipher(v, k):
y=v[0]
z=v[1]
sum=0xC6EF3720
delta=0x9E3779B9
n=32
w=[0,0]
# sum = delta<<5, in general sum = delta * n
while(n>0):
z -= (y << 4^y >> 5) + y^sum + k[sum>>11 & 3]
z &= 4294967295L
sum -= delta
y -= (z << 4^z >> 5) + z^sum + k[sum&3]
y &= 4294967295L
n -= 1
w[0]=y; w[1]=z
return w
exemple Python:
>>> import tea
>>> key = [0xbe168aa1, 0x16c498a3, 0x5e87b018, 0x56de7805]
>>> v = [0xe15034c8, 0x260fd6d5]
>>> res = tea.encipher(v, key)
>>> "%X %X" % (res[0], res[1])
**'70D16811 F935148F'**
C exemple:
#include <unistd.h>
#include <stdio.h>
void encipher(unsigned long *const v,unsigned long *const w,
const unsigned long *const k)
{
register unsigned long y=v[0],z=v[1],sum=0,delta=0x9E3779B9,
a=k[0],b=k[1],c=k[2],d=k[3],n=32;
while(n-->0)
{
sum += delta;
y += (z << 4)+a^z+sum^(z >> 5)+b;
z += (y << 4)+c^y+sum^(y >> 5)+d;
}
w[0]=y; w[1]=z;
}
int main()
{
unsigned long v[] = {0xe15034c8, 0x260fd6d5};
unsigned long key[] = {0xbe168aa1, 0x16c498a3, 0x5e87b018, 0x56de7805};
unsigned long res[2];
encipher(v, res, key);
printf("%X %X\n", res[0], res[1]);
return 0;
}
$ ./tea
**D6942D68 6F87870D**
S'il vous plaît noter que les deux exemples ont été réalisés avec la même entrée données (v et clé), mais les résultats étaient différents. Je suis sûr que la mise en œuvre de C est correcte - elle vient d'un site référencé par wikipedia (je ne pouvais pas poster de lien car je n'ai pas assez de points de réputation - quelque chose d'antispam)
La seule solution qui me vint à l'esprit est d'utiliser ctypes bibliothèque Python. Mais je ne suis pas sûr que cela fonctionnerait. – grzaks
Cela ressemble plus à une implémentation de XTEA qu'à TEA. – abc