Implementazioni di algoritmi/TEA: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
cambio avanzamento a 100%
m Update syntaxhighlight tags - remove use of deprecated <source> tags
 
Riga 7: Riga 7:
Il codice seguente è stato rilasciato nel pubblico dominio dai suoi stessi creatori: David Wheeler and Roger Needham.
Il codice seguente è stato rilasciato nel pubblico dominio dai suoi stessi creatori: David Wheeler and Roger Needham.


<source lang="c">
<syntaxhighlight lang="c">
#include <stdint.h>
#include <stdint.h>


Riga 33: Riga 33:
v[0]=v0; v[1]=v1;
v[0]=v0; v[1]=v1;
}
}
</syntaxhighlight>
</source>
[[Categoria:Implementazioni di algoritmi|Crittografia]]
[[Categoria:Implementazioni di algoritmi|Crittografia]]
{{Avanzamento|100%|7 agosto 2008}}
{{Avanzamento|100%|7 agosto 2008}}

Versione attuale delle 06:05, 19 apr 2020

Indice del libro

TEA è un algoritmo molto veloce, ma possiede alcune debolezze che lo rendono poco affidabile per crittografie ad alto livello, proprio grazie a queste debolezze è stato possibile l'hacking dell'Xbox dove veniva utilizzata come funzione di hash. Esistono comunque versioni più sicure come XTEA o XXTEA.

Implementazione in C[modifica]

Il codice seguente è stato rilasciato nel pubblico dominio dai suoi stessi creatori: David Wheeler and Roger Needham.

#include <stdint.h>

void encrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0, i;           /* set up */
    uint32_t delta=0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */
    for (i=0; i < 32; i++) {                       /* basic cycle start */
        sum += delta;
        v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);  
    }                                              /* end cycle */
    v[0]=v0; v[1]=v1;
}

void decrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i;  /* set up */
    uint32_t delta=0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */
    for (i=0; i<32; i++) {                         /* basic cycle start */
        v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
        v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        sum -= delta;                                   
    }                                              /* end cycle */
    v[0]=v0; v[1]=v1;
}