打包任意位數的好方法是什麼?我有已知只包含某些字符並想要加密的句子。因此,一個選項是使用較少的位來表示這些字符並加密過程中的字符。打包任意位數
我看着std :: bitset,但它需要我指定bitset的大小作爲常量,這是不會的。
我還想知道如何將壓縮比特轉換回字符來遮蔽輸出。
即如果我將A包裝到1000並將B包裝到0100,則最終的8位包裝是1000 0100,這是另一個字符。
順便說一句,這是不應該的加密強大的形式在所有
打包任意位數的好方法是什麼?我有已知只包含某些字符並想要加密的句子。因此,一個選項是使用較少的位來表示這些字符並加密過程中的字符。打包任意位數
我看着std :: bitset,但它需要我指定bitset的大小作爲常量,這是不會的。
我還想知道如何將壓縮比特轉換回字符來遮蔽輸出。
即如果我將A包裝到1000並將B包裝到0100,則最終的8位包裝是1000 0100,這是另一個字符。
順便說一句,這是不應該的加密強大的形式在所有
你所尋找的是一個dynamic_bitset
。這就像std::bitset
,但它可以動態改變其大小。
此外,您可以使用std::vector<bool>
這將做你所需要的作爲一個稍微不幸的歷史決定,作爲一個bitset實施它的副作用。
希望它有幫助。祝你好運!
如果你只從字面上編碼十六字母(說AP)的字母,那麼你就可以建立一個查找表:
unsigned char table[256] = {};
table['A'] = 0x0;
table['B'] = 0x1;
// ...
table['P'] = 0xF;
現在你可以編碼每兩個字母x
和y
爲:
table[x] * 0x10 + table[y]
您應該將其與獨特填充方案結合使用,以便將輸入數據填充到偶數個字母(PKCS填充的某些變體應起作用)。
「我還想知道如何將壓縮位轉換回字符」 這是基本的編碼理論。你可能想要一個Huffman編碼,這是一個沒有共享前綴的編碼。所以,如果A是1000
,那麼沒有代碼100
也不是10001
。
因此,您可以在二叉樹中組織符號。使用壓縮位從根節點走到葉節點,向左走0或向右走1。當你到達葉節點時,發出存儲在那裏的字符,並再次從根開始。
我實際上知道這一點,但由於一些限制,我沒有提到,這是不可能的。這是一個很好的解決方案,但 – user929404 2013-05-06 13:54:50
如果你有限制,不允許合理的解決方案,告訴我們!也就是說,如果你理解哈夫曼編碼背後的數學(或者一般的編碼理論),那麼將它應用到你真正的問題領域。 – MSalters 2013-05-06 14:06:40
它不是*任何形式的加密... – 2013-05-04 14:27:21
查看Base64是如何工作的。這就是將每六位「封裝」爲八位(所以三個輸入字節變成四個輸出字節)。你可以使用類似的邏輯。 – 2013-05-04 14:27:59
@KerrekSB更多的是練習比其他任何東西 – user929404 2013-05-04 14:29:28