IP地址加密,请各位大神帮忙

mapler26 2014-10-25 08:03:13
这是一个有关IP地址加密的函数,麻烦各位大神帮我看看它用的方法和原理是什么,谢谢!

const unsigned char sbox[256] = {
0x91, 0x58, 0xb3, 0x31, 0x6c, 0x33, 0xda, 0x88,
0x57, 0xdd, 0x8c, 0xf2, 0x29, 0x5a, 0x08, 0x9f,
……
0xf4, 0xc6, 0xbc, 0xa2, 0x51, 0x58, 0xe8, 0xae,
};
……

F(uint64_t r, uint64_t R, uint64_t seed)
{
uint64_t r0, r1, r2, r3;

#define GETBYTE(R,n) ((((R)>>(n*8))^seed^r)&0xFF)

R ^= seed;

r0 = sbox[GETBYTE(R,0)]<< 0 | sbox[GETBYTE(R,1)]<< 8;
r1 = (sbox[GETBYTE(R,2)]<<16UL | sbox[GETBYTE(R,3)]<<24UL)&0x0ffffFFFFUL;
r2 = sbox[GETBYTE(R,4)]<< 0 | sbox[GETBYTE(R,5)]<< 8;
r3 = (sbox[GETBYTE(R,6)]<<16UL | sbox[GETBYTE(R,7)]<<24UL)&0x0ffffFFFFUL;

R = r0 ^ r1 ^ r2<<23UL ^ r3<<33UL;

return R;
}
...全文
472 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianghandaxue 2014-10-31
  • 打赏
  • 举报
回复
引用 1 楼 zhangjie9u 的回复:
我的理解: 1、GETBYTE(R, n),取整数R从右往左第n字节; 2、sbox,为密码学中常用的一种可逆变换,正变换从索引到值,逆变换从值到索引; 3、最后R = r0 ^ r1 ^ r2<<23UL ^ r3<<33UL;,这句没理解,这样写不知道能不能解密了,写成R = r0 ^ r1 ^ r2<<32UL ^ r3<<32UL;倒可以解密; 4、F(uint64_t r, uint64_t R, uint64_t seed)函数可以理解为用r、seed做密钥,对R做加密。
正如这位老兄所说,大致是这个意思
zhangjie9u 2014-10-25
  • 打赏
  • 举报
回复
我的理解: 1、GETBYTE(R, n),取整数R从右往左第n字节; 2、sbox,为密码学中常用的一种可逆变换,正变换从索引到值,逆变换从值到索引; 3、最后R = r0 ^ r1 ^ r2<<23UL ^ r3<<33UL;,这句没理解,这样写不知道能不能解密了,写成R = r0 ^ r1 ^ r2<<32UL ^ r3<<32UL;倒可以解密; 4、F(uint64_t r, uint64_t R, uint64_t seed)函数可以理解为用r、seed做密钥,对R做加密。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧