2012-05-09 37 views
1

我想加密我發送給服務器上的客戶端(不一定爲了安全起見,只是爲了防止有人輕易看到Wireshark之​​類的數據)。UTF-8字符串的簡單加密,其結果是NULL終止字符串?

我正在尋找一個算法,其中的結果仍然是一個NULL結尾的字符串,但可以非常快速,輕鬆地解密回一個UTF-8字符串。我使用的網絡庫只允許我向客戶端發送NULL終止的字符串,這就是爲什麼。我正在使用具有可靠數據包的UDP庫。

什麼是一些算法可以做這樣的事情?

感謝

+0

我可以問問消息會有多長? – ScarletAmaranth

+0

@ScarletAmaranth有些可能在3-4kb左右,但平均約爲50字節 – jmasterx

+0

信息完整性很重要? (你是否想要防暴?) – ScarletAmaranth

回答

3

XOR搭配值(或另一字符串)所有的字節。

之前發送的數據,使用0xff 0xFE的所有0xFF的使用0xff 0xFF的替換所有 '\ 0' 字符。 (可以使用其他值,很明顯)

當接收到數據時,逆轉這一過程 - 用0xff和OXFF 0xFE的替換0xff的0xff的爲0,然後用鍵異或運算。

另外,您可以用Base64編碼加密數據採取\0字符照顧。

0

如果你想打破你的數據,你可以尋找那些的Base64編碼功能,ROT13,或HEX編碼。

+0

我仍然認爲異或鍵會比這三個選項更好。 – Lalaland

+1

是的。 XOR爲您提供1比1的字節長度比ROT13更少的可讀性。 – alexg

0

如果您需要的密文是大小明文相同,那麼你需要字符映射從[1..255]爲[1.255],所以你可以做這樣的事情

cipherbyte = ((clearbyte + keystreambyte) mod 255)+1 

你確定你有[1..255]中每個角色的清晰路徑嗎?

如果你不介意大於明文的密文,那麼你可以XOR(mod 256)並採用轉義機制,比如SigTerm建議的。

注意在任何情況下,您都需要一些密鑰流材料,並且必須決定一些關鍵的管理策略。閱讀stream ciphers可能會給你一個好的開始,請記住,兩次使用相同的密鑰相當於一次又一次地使用相同的編碼(不是很強)。

+0

恩,那麼'clearbyte + keystreambyte == 255'怎麼辦? –

+0

假設不失一般性,密鑰流字節總是0.現在清除1 =>密碼2,清除2 =>密碼3,...清除254 =>密碼255,清除255 =>密碼1.看起來像一個1對1映射給我。 –