新生赛的简单题
注意一点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}