2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

使用者:Selfice/圖書館/標準SH5——介紹與加密解密

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
跳至導覽 跳至搜尋

前言

相信有些人知道ShortHide5,並且掌握了它的解密方法(加密方法比較麻煩)

但是它事實上仍然是存在一些問題的,這一次,我對於舊版的ShortHide5經過了一點點的改進,正式命名為Standard Short Hide 5,即標準化的ShortHide5,以下仍然簡稱sh5,接下來是它的正式定義。

正則匹配項"[A-Z][0-9a-z]+"

sh5的密文字符串為1至3個以下的正則表達式匹配項目組合而成

[A-Z][0-9a-z]+

簡單來說,1至3個,加上若干個數字和小寫字母的組合,例如以下幾個都是符合條件的模式。

Tef5
GopvF225
Gopvfh640F2sdgBgs2vs0

也就是說,sh5僅僅支持1組,2組,3組,不存在4組,並且也無此必要,因為2組在極限情況下可以做到覆蓋5^2=25個不同的字符,不過在解釋這個之前,我們還是先看一個例子吧。

Lpd4K11bj

這是一個擁有2組的sh5密文,分別是Lpd4K11bj,每組的首字母都是大寫字母,也就是(L,K)它們可以轉換成數字,不過是通過下面這個字母表。

XABCDEFGHIJKLMNOPQRSTUVWYZ

也就是說,A轉換成1,B轉換成2,...W轉換成23,Y轉換成24,Z轉換成25。

為什麼要用這樣一張表?X又起什麼作用?

簡單來說,X作為開頭的英文單詞的最少的,特例的情況就會比較少,這個稍後會介紹的。

總之(L,K)=>(12,11),而每一組剩餘的部分為(pd4,11bj),這事實上是2個36進制的數字,而且使用的36個符號就是[0-9a-z],我們需要把它轉換成5進制,這裡是沒有改動的。

可以使用在線網站完成這一步。

於是pd4就轉換成了202244211bj則轉換成了3021432

(2022442,3021432)排列成如下的形式。

2  3
0  0
2  2
2  1
4  4
4  3
2  2

每一組數字分別乘以它們的前綴。

12 * 2 + 11 * 3 = 57
12 * 0 + 11 * 0 = 00
12 * 2 + 11 * 2 = 46
12 * 2 + 11 * 1 = 35
12 * 4 + 11 * 4 = 92
12 * 4 + 11 * 3 = 81
12 * 2 + 11 * 2 = 46

把結果對於26求模。

57 % 26 = 05
00 % 26 = 00
46 % 26 = 20
35 % 26 = 09
92 % 26 = 14
81 % 26 = 03
46 % 26 = 20

剩餘的數字通過一開始的字母錶轉換成字母,得到結果為extinct

對於曾經的sh5有印象的人估計會發現,好像少了什麼步驟,沒錯,減去2的步驟消失了,其實這麼做,對於sh5的加密能力並不會什麼變化。

(上述步驟其實也可以用一個矩陣乘法來描述。)

特例X

現在,假設你要加密一個單詞xenophobia,很不巧它是個為數不多的x開頭的單詞,我們忽略後面的字母,思考一下,x在開頭的結果是什麼。

對於這個問題,可以先考慮一下,什麼情況下,什麼時候會得到x,首先,假設開頭的大寫字母是U1和U2,表示一個字母的運算係數為V1和V2,那麼運算想要得到x的公式為

$U1 \times V1+U2 \times V2\equiv 0\left(\mod 26\right)$

其中V1和V2隻取0,1,2,3,4這5個數,如果在V1和V2都不為0的情況下,這個等式能成立,那當然很好。

但如果做不到,即當且僅當V1=V2=0時,等式成立,而V1和V2又處於首位,在5進制向着36進制轉換的過程中,首位的0的信息就丟失了,如果你試圖反推,就很容易發現這個問題。

為了解決這個問題,當要加密的單詞以x開頭的時候,直接把它轉換成大寫字母,對後續的部分進行sh5加密。

也就是說加密就結果以X開頭,後面直接跟隨着enophobia的加密結果,XA6t1fEcy5e

如果單詞開頭有2個X,那麼加密結果的開頭也會有2個X。

在此處就需要引出一個額外的規定,雖然密文的匹配項原則上允許使用大寫字母X,但因為X=0本就完全無必要作為運算的大寫字母,所以實際根本不會使用它,自然也不會產生混淆。

AE可以表達25個字母

(A,E)=(1,5)

這是一個致勝組合,使用它可以加密絕大多數的單詞,只要單詞不含有字母Z

1 5       1 5       1 5       1 5       1 5
------------------------------------------------
0 0 = 00| 1 0 = 01| 2 0 = 02| 3 0 = 03| 4 0 = 04
0 1 = 05| 1 1 = 06| 2 1 = 07| 3 1 = 08| 4 1 = 09
0 2 = 10| 1 2 = 11| 2 2 = 12| 3 2 = 13| 4 2 = 14
0 3 = 15| 1 3 = 16| 2 3 = 17| 3 3 = 18| 4 3 = 19
0 4 = 20| 1 4 = 21| 2 4 = 22| 3 4 = 23| 4 4 = 24

可以看得出來,0到24這25個數字都能運算出來,自然除了Z以外的字母都可以用這個組合來表達。

如果碰到有Z的單詞,基本上也總存在其他的字母組合可以表達,所以2個大寫字母的表達能力其實也是很強的。

擴展的三組

如果很不巧,你想要加密的單詞無法用2組來表達,那麼就只能使用3組了。

但是3組的表達能力實在是太強了,僅僅用來表示26個字母實在是浪費了,所以3組的字母表有64個字符(後續的計算步驟也是對於64求模)。

.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,

開頭的小數點只是為了顯示,它其實代表了空格,並且它的特殊意義就類似於原本的X,處理方法也是相同的。

注意,此處僅僅是字母表擴展,而sh5密文的規則仍然是不變的[A-Z][0-9a-z]+,但是因為字母表改變了,X的特殊意義也消失,它變回了普通的可以使用的字母。

在這個擴展的3組規則下,sh5就可以表達更多樣化的信息。

結尾

關於1組的sh5,它的字母表是未定義的,並且默認情況下不使用它,你可以在自己的實現中定義它,但是它可以表達的範圍太小,並且同樣也存在首字母問題,比方說你也許可以使用UILOVEANDY

以上就是標準化的ShortHide5的全部內容,也許各位編程高手也可以試着挑戰一下,實現這個密碼的加密和解密,雖然聽上去有點雲裡霧裡的,但是只要認真看完這些步驟,完全能夠理解步驟。

如果你已經躍躍欲試了,那麼請務必注意這非常重要的一點,sh5的特性是加密的結果不唯一,但解密唯一,這裡不是很推薦加密出全部的結果(它們很多是相似的),但是至少要做到能在全部結果中隨機選擇出N個結果,和指定一組大寫字母進行加密的功能。

另外,沒有密鑰的密碼,除非能做到方法的保密,否則就沒有安全性可言,而方法本身就很難做到保密,所以密鑰才是真正能保障安全性的,而不是加密的方法。

編者附. 神秘數字

6731383216