簡體   English   中英

如何控制加密字符串的長度?

[英]How to control length of encrypted String?

是否可以保證輸出的長度一定,而與輸入無關?

例如,我想傳入一個字符串並保證其加密等效項將包含45個字符。 無論輸入的是愛麗絲夢游仙境的1個字符,都必須有這45個字符。

注意 :45顯然是一個示例,重點是應該以某種方式控制輸出字符的數量(准確的數字,或者被5整除,甚至是偶數)

否-無法指定固定的結果長度。 如果數據足夠長,則無法將其加密為固定的任意短長度(這將是驚人的壓縮)。 有可能設計出這種性質的hash 但是哈希是不同的(這是一種方式;您不能從哈希中提取原始數據)。

不過,可以通過使用填充來控制長度。

如果將限制設置為“足夠高”,可以,您可以使用填充和流密碼輕松地執行所需的操作。

例如,看看塊密碼的CTR(計數器)操作模式: http : //en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29

在CTR模式下使用AES-128,如果您使用隨機IV並將其插入到密文的開頭,您將知道密文的大小將恰好是16字節+純文本的大小。 因此,例如,如果將密文長度固定為100個字節,則可以加密最多84個字節的純文本。 您必須填充較短的純文本。 例如,如果您要加密ASCII文本,則可以將字節0x00用作字符串結尾的標記(就像C中的“以空終止的字符串”一樣),然后只需填充隨機垃圾,直到得到84個字節。

您可以使用許多其他常見的填充方案: http : //en.wikipedia.org/wiki/Padding_(cryptography)

我剛剛想到了另一種可能性:您可以使用某種經過身份驗證的加密,例如Galois / Counter Mode(GCM)。 您將隨機IV與密文連接起來,並將其與隨機字節連接起來以將其填充到所需的大小。 然后,要解密,只需嘗試密文的每個子字符串:如果獲得正確的子字符串,解密算法將輸出純文本; 否則,將輸出“錯誤”。 請注意,使用此方法,您可能會對方案引入一些定時攻擊,並且如果純文本的大小變化很大,您可能還會進行大量計算以解密密文。

無論如何,請確保由密碼學專家審核您的方案(例如,在設計方案后,請在https://crypto.stackexchange.com/上詢問該方案),因為它很容易忽略某些方案攻擊的可能性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM