我想加密我發送給服務器上的客戶端(不一定爲了安全起見,只是爲了防止有人輕易看到Wireshark之類的數據)。UTF-8字符串的簡單加密,其結果是NULL終止字符串?
我正在尋找一個算法,其中的結果仍然是一個NULL結尾的字符串,但可以非常快速,輕鬆地解密回一個UTF-8字符串。我使用的網絡庫只允許我向客戶端發送NULL終止的字符串,這就是爲什麼。我正在使用具有可靠數據包的UDP庫。
什麼是一些算法可以做這樣的事情?
感謝
我想加密我發送給服務器上的客戶端(不一定爲了安全起見,只是爲了防止有人輕易看到Wireshark之類的數據)。UTF-8字符串的簡單加密,其結果是NULL終止字符串?
我正在尋找一個算法,其中的結果仍然是一個NULL結尾的字符串,但可以非常快速,輕鬆地解密回一個UTF-8字符串。我使用的網絡庫只允許我向客戶端發送NULL終止的字符串,這就是爲什麼。我正在使用具有可靠數據包的UDP庫。
什麼是一些算法可以做這樣的事情?
感謝
XOR搭配值(或另一字符串)所有的字節。
之前發送的數據,使用0xff 0xFE的所有0xFF的使用0xff 0xFF的替換所有 '\ 0' 字符。 (可以使用其他值,很明顯)
當接收到數據時,逆轉這一過程 - 用0xff和OXFF 0xFE的替換0xff的0xff的爲0,然後用鍵異或運算。
另外,您可以用Base64編碼加密數據採取\0
字符照顧。
如果您需要的密文是大小明文相同,那麼你需要字符映射從[1..255]爲[1.255],所以你可以做這樣的事情
cipherbyte = ((clearbyte + keystreambyte) mod 255)+1
你確定你有[1..255]中每個角色的清晰路徑嗎?
如果你不介意大於明文的密文,那麼你可以XOR(mod 256)並採用轉義機制,比如SigTerm建議的。
注意在任何情況下,您都需要一些密鑰流材料,並且必須決定一些關鍵的管理策略。閱讀stream ciphers可能會給你一個好的開始,請記住,兩次使用相同的密鑰相當於一次又一次地使用相同的編碼(不是很強)。
恩,那麼'clearbyte + keystreambyte == 255'怎麼辦? –
假設不失一般性,密鑰流字節總是0.現在清除1 =>密碼2,清除2 =>密碼3,...清除254 =>密碼255,清除255 =>密碼1.看起來像一個1對1映射給我。 –
我可以問問消息會有多長? – ScarletAmaranth
@ScarletAmaranth有些可能在3-4kb左右,但平均約爲50字節 – jmasterx
信息完整性很重要? (你是否想要防暴?) – ScarletAmaranth