我们正在寻找一种加密16位数字(可能是10-20位数字)的方法,具有以下要求:
答案 0 :(得分:3)
我可以想象一个16位到20位的加密算法:
加密:
解密:
0
,剩余16位数字。答案 1 :(得分:2)
简单且非常低的安全性:添加一些内容,然后将该数字与另一个相似数量的XOR进行异或。只有在没有人可以访问源代码的情况下才可行。任何能够访问该程序(即使没有源代码)并且可以使用一些样本(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;
答案 2 :(得分:1)
您可能正在查看块大小,块大小最多可容纳20个十进制数字。您可以使用具有可变块大小的Hasty Pudding cipher,或者您可以使用每个块的偶数位来滚动自己的简单Feistel cipher。你似乎不需要非常高的安全性,所以一个简单的Feistel密码有四到六轮可能会更容易。
我使用简单的Feistel密码进行整数排列,F函数是:
// 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()
你似乎不需要比这更复杂的东西。如果你想要加密安全,那就使用更加安全的Hasty Pudding。
任何适当大小的二进制块都可以表示为十进制数字。