#include <stdio.h>
void encode(short* v, short* k) {
unsigned short n=32, y=v[0],z=v[1], sum=0,
delta=0x9e37; /* a key schedule constant */
while (n-->0)
{
sum += delta ;
y += ((z<<2)+k[0]) ^ (z+sum) ^ ((z>>3)+k[1]) ;
z += ((y<<2)+k[0]) ^ (y+sum) ^ ((y>>3)+k[1]) ;
}
v[0]=y ; v[1]=z ; }
void decode(short* v,short* k) {
unsigned short n=32, sum, y=v[0], z=v[1],
delta=0x9e37 ;
sum=delta<<5;
while (n-->0)
{
z-= ((y<<2)+k[0]) ^ (y+sum) ^ ((y>>3)+k[1]) ;
y-= ((z<<2)+k[0]) ^ (z+sum) ^ ((z>>3)+k[1]) ;
sum-=delta ;
}
v[0]=y ; v[1]=z ; }
int main(int argc, char *argv[])
{
unsigned short k1[2],k2[2];
unsigned short p[2],c[2];
k1[0]=0x00XX;// X是要 求的
k1[1]=0xXXXX;// X是要 求的
k2[0]=0x00XX;// X是要 求的
k2[1]=0xXXXX;// X是要 求的
p[0]=0x0001;
p[1]=0x0002;
printf("Plaintext (%4x,%4x)",p[0],p[1]);
/* double encrypt */
encode(p,k1);
encode(p,k2);
printf(" Encoded= ");
printf("(%4x,%4x)",p[0],p[1]);
/* double decrypt */
decode(p,k2);
decode(p,k1);
printf(" Decoded= ");
printf("(%4x,%4x)\n",p[0],p[1]);
p[0]=0x1234;
p[1]=0x5678;
printf("Plaintext (%4x,%4x)",p[0],p[1]);
encode(p,k1);
encode(p,k2);
printf(" Encoded= ");
printf("(%4x,%4x)",p[0],p[1]);
decode(p,k2);
decode(p,k1);
printf(" Decoded= ");
printf("(%4x,%4x)\n",p[0],p[1]);
p[0]=0x6789;
p[1]=0xDABC;
printf("Plaintext (%4x,%4x)",p[0],p[1]);
encode(p,k1);
encode(p,k2);
printf(" Encoded= ");
printf("(%4x,%4x)",p[0],p[1]);
decode(p,k2);
decode(p,k1);
printf(" Decoded= ");
printf("(%4x,%4x)\n",p[0],p[1]);
p[0]=0x9ABC;
p[1]=0xDEFF;
printf("Plaintext (%4x,%4x)",p[0],p[1]);
encode(p,k1);
encode(p,k2);
printf(" Encoded= ");
printf("(%4x,%4x)",p[0],p[1]);
decode(p,k2);
decode(p,k1);
printf(" Decoded= ");
printf("(%4x,%4x)\n",p[0],p[1]);
return 0;
}
输出:
plaintext( 1, 2) encoded=(c6db,4caf) decoded=( 1, 2)
plaintext(1234,5678) encoded=(1390,1704) decoded=(1234,5678)
plaintext(6789,dabc) encoded=(fbee,dd8b) decoded=(6789,dabc)
plaintext(9abc,deff) encoded=(67ef,6600) decoded=(9abc,deff)
求k1,k2
知道怎么解的跟帖
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)