Keys

這種字元串加密方法“不可破解”嗎?

  • August 23, 2016

我正在考慮加密字元串的獨特方法,我想到了這一點。

給定一個字元串,例如“Hello, World!” 我們可以使用電腦程序將其轉換為 char 數組,然後將每個 char 轉換為 ASCII charcode 表中對應的數字。(例如,H 是 72,e 是 101 等)然後將每個數字乘以一個隨機“密鑰”,它只是一個整數(每個數字都相同),在這種情況下假設它是 3042(所以 72 現在是 219024,101 現在是 307242)。

然後,從每個數字中刪除一個值,這將是我們的第二個鍵(在這種情況下,假設它是 287),所以 219024 變為 218737 等等。

現在你看,如果沒有從數字 * key1 的結果中刪除第二個鍵,那麼我們可以簡單地找到所有數字的公因數,然後抓住這個鍵。

然而,由於第二個密鑰被刪除,這種加密方法在不知道至少第二個密鑰的情況下實際上是不可破解的嗎?

您所描述的是替代密碼的一個非常複雜的版本。明文中的每個字母都被密文中的整數替換。如果我有兩個 ’e’,它們都將編碼為相同的值。

不幸的是,在這種情況下,該算法遠非不可破解。有一句名言:“任何人都可以創建一個複雜到連他們都無法破解的加密算法。” 這是其中一種情況。所有替代密碼都成為統計分析的犧牲品。如果您有任何關於字母或單詞的統計可能性的資訊,您可以相當快速地推斷出關鍵。這種密碼在凱撒時代被認為是牢不可破的,但自從 1600 年代機率形式化以來,這種加密被認為是“完全破解”。

打破此算法的最快方法是收集足夠的字元以確信您有兩個連續的字元(例如“a”和“b”或“g”和“h”)。如果您將自己限制為大寫字母,則可以保證 14 個唯一字元,或者如果您有整個 8 位 ASCII 空間可供使用,則可以保證 129 個字元(鴿籠原則保證,如果您有這麼多字元,至少一對它們必須是連續的)。一旦你有足夠的字元,只需對它們進行排序並找到最小的間隙。它們之間間隔最小的字母是連續的。一旦你有了這兩個,你就可以做簡單的代數來得到這兩個鍵。

如果你試圖通過只使用一半的字母(例如 acegikmoprtvxz)來避免這個漏洞,那麼攻擊者在進行這種攻擊時會看到亂碼。當他們意識到這一點時,他們可以簡單地查看他們生成的密鑰的倍數,直到消息開始變得有意義。

引用自:https://crypto.stackexchange.com/questions/39526