無論輸入如何,是否可以保證輸出具有一定的長度?如何控制加密字符串的長度?
例如,我想傳遞一個字符串,並保證其'加密的等價物將包含45個字符。無論輸入是愛麗絲漫遊仙境中的1個字符,這45個字符都必須存在。
注:45顯然是一個實施例中,點是輸出字符數目應當以某種方式(確切數量,或整除5,或甚至)來控制
無論輸入如何,是否可以保證輸出具有一定的長度?如何控制加密字符串的長度?
例如,我想傳遞一個字符串,並保證其'加密的等價物將包含45個字符。無論輸入是愛麗絲漫遊仙境中的1個字符,這45個字符都必須存在。
注:45顯然是一個實施例中,點是輸出字符數目應當以某種方式(確切數量,或整除5,或甚至)來控制
如果你設置的限制「足夠高」,是的,你可以很容易地做你想做的事情,使用填充加流密碼。
例如,看一看塊密碼的操作CTR(計數器)模式:http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
在CTR模式下使用AES-128,如果使用隨機IV,在開始時將其插入在密文中,您知道密文的大小恰好是純文本的16個字節+大小。因此,例如,如果將密文長度修正爲100字節,則可以加密最多84個字節的純文本。你必須填充較短的純文本。例如,如果你正在加密ASCII文本,你可以使用字節0x00作爲字符串末尾的標記(就像C中的「null-terminated strings」一樣),然後用隨機垃圾填充,直到得到84字節。
有可以使用其他許多常見的填充方案:http://en.wikipedia.org/wiki/Padding_(cryptography)
我只是想到了另一種可能性:你可以使用某種形式的認證加密,如伽羅瓦/計數器模式(GCM)。您將隨機IV與密文連接起來,並用隨機字節將其填充到所需的大小。然後,爲了解密,您只需嘗試密文的每個子字符串:如果您得到正確的子字符串,解密算法將輸出純文本;否則,它會輸出「錯誤」。請注意,使用這種方法,您可能會在計劃中引入一些計時攻擊,並且如果明文大小差異很大,您可能還會執行大量計算來解密密文。
在任何情況下,請確保您的計劃由密碼學專家審查(例如,在您設計計劃後,在https://crypto.stackexchange.com/處詢問),因爲忽略一些攻擊可能性非常容易。
我很好奇:爲什麼你想要對密文的大小有這樣的控制?你想做什麼? –
將在一秒內更新問題 – JAM
正如我在輸入答案,我意識到這不是一個硬性要求:)總是有助於表達事物。 – JAM