我已經在C++中實現了TEA。以下是代碼:加密和解密結果在TEA中不相同
#include <stdio.h>
#include <iostream>
#include <iostream>
using namespace std;
int main()
{
unsigned long y=24,z=32, sum=0,
delta=0x9e3779b9, n=16 ;
int k[4] = { 0x28, 0xc0, 0x20, 0xd0 };
unsigned long v[2] = {0,0};
cout<<"original y is "<< y<<". original z is "<<z<<endl;
while (n-->0)
{
sum += delta ;
y += ((z<<4)+k[0])^(z+sum)^((z>>5)+k[1]) ;
z += ((y<<4)+k[2])^(y+sum)^((y>>5)+k[3]) ;
}
v[0]=y ; v[1]=z ;
cout<<"encrypted y is "<< v[0]<<". encrypted z is "<<v[1]<<endl;
n=16;
y=v[0];
z=v[1];
delta=0x9e3779b9 ;
sum=delta<<5 ;
/* start cycle */
while (n-->0)
{
z-= ((y<<4)+k[2])^(y+sum)^((y>>5)+k[3]) ;
y-= ((z<<4)+k[0])^(z+sum)^((z>>5)+k[1]) ;
sum-=delta ;
}
v[0]=y ; v[1]=z ;
cout<<"decrypted y is "<< v[0]<<". decrypted z is "<<v[1]<<endl;
getchar();
return 0;
}
但在結束時,結果是不相同的,即所解密的值比原來的輸入(y
和z
)不同。 請指出我無法看到的錯誤。
不挑剔,但其他答案似乎提供了一個更好的理解*爲什麼*它不工作,以及如何解決它在一般情況下:) – melak47