新生赛的简单题
注意一点v4 -= 1640531527实际上就等于+0x9E3779B9
#include <stdio.h>
#include <stdint.h>
//解密函数
void decrypt (uint32_t* v, uint32_t* k) {
uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i;
uint32_t delta=0x9e3779b9;
uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];
for (i=0; i<32; i++) { //解密时将加密算法的顺序倒过来,还有+=变为-=
v1 -= (v0*16 + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
v0 -= (v1*16 + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
sum -= delta;
}
v[0]=v0; v[1]=v1;//解密后再重新赋值
}
int main()
{
uint32_t v[2]={676078132,957400408},k[4]={1702060386,1870148662,1634038898,1634038904};
// v为要加密的数据是两个32位无符号整数
// k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位
printf("加密前原始数据:%u %u\n",v[0],v[1]);
decrypt(v, k);
printf("解密后的数据:%u %u\n",v[0],v[1]);
return 0;
}
moectf{836153a5-8e00-49bd-9c42-caf30620caaf}