什么是包装任意位数的好方法?我知道的句子只包含某些字符,并且想要加密。因此,一个选项是使用较少的位来表示这些字符并加密过程中的字符。
我查看了std :: bitset,但它要求我将bitset的大小指定为常量,这是不行的。
我还想知道如何将打包的比特转换回字符以模糊输出。
即如果我将A打包到1000而B打包到0100,则得到的8位打包是1000 0100,这是另一个字符。
顺便说一句,这不应该是一种强大的加密形式
答案 0 :(得分:0)
您要找的是dynamic_bitset
。它就像std::bitset
,但它可以动态地改变它的大小。
此外,你可以使用std::vector<bool>
作为稍微不幸的历史决定的副作用来实现你需要的东西。
希望它有所帮助。祝你好运!
答案 1 :(得分:0)
如果您只编码十六个字母的字母表(比如A-P),那么您可以构建一个查找表:
unsigned char table[256] = {};
table['A'] = 0x0;
table['B'] = 0x1;
// ...
table['P'] = 0xF;
现在,您可以将每两个字母x
和y
编码为:
table[x] * 0x10 + table[y]
你应该将它与一个唯一填充方案结合起来,将输入数据填充到偶数个字母(PKCS填充的某些变体应该有效)。
答案 2 :(得分:0)
“我还想知道如何将打包的比特转换回字符”
这是基本的编码理论。您可能需要霍夫曼编码,这是一种没有共享前缀的编码。因此,如果A是1000
,那么就没有代码100
也没有10001
。
因此,您可以在二叉树中组织符号。使用压缩位从根向下走到叶节点,向左移动0或向右移动1.当到达叶节点时,发出存储在那里的字符,然后再从根开始。