我们正在寻找一种加密16位数字(可能是10-20位数字)的方法,具有以下要求:
- 输出也是数字
- 输出不会翻倍(或大量增加数字位数)
- 不需要预先存储大量映射表
- 可以接受中低安全性
简单而且安全性很低:添加一些内容,然后将数字与另一个大小相似的数字进行异或运算。只有在没有人可以访问源代码的情况下才可行。任何有权访问程序(即使没有源代码)并可以使用几个样本(0、1000、10000、10000000)运行它的人都能够弄清楚它。
根据语言不同:
uint64_t theNumber;
uint64_t cryptbase1= 12345678909876, cryptbase2= 234567890987654;
// encrypt
uint64_t encrypted= (theNumber + cryptbase1) ^ cryptbase2;
// decrypt
uint64_t decrypted= (encrypted ^ cryptbase2) - cryptbase1;
0
,剩下16位。// The F function for the Feistel rounds.
private int F(int num, int round) {
// XOR with round key.
num ^= mRoundKeys[round];
// Square, then XOR the high and low parts.
num *= num;
return (num >>> HALF_SHIFT) ^ (num & LOW_16_MASK);
} // end F()