FCix - Forest Cipher Six 加密原理

引入: 自定義

 

FCix 修改自失敗作品FCZ。FCZ 全名「FCZero」,原名「FC0」,是FC2 改造後重新整合FC4、FC3 與FC5 的中文加密結構,但是這三者之間聯繫不夠緊密,最後以完全失敗落幕。

 

FC2 源自函式保密程式「Funcrypt」之名,其原名為「Function Crypter」,取縮寫並改名為「Forest Cipher」。加密原理是對英文文章內常出現的連續詞替換成幾乎不會出現的另一個連續詞,重複動作,人眼難以辨識。重複的過程由一組使用者自訂的密碼決定。但是這個「連續詞替換」只會讓文章越來越長,即使如此,她能讓文章越來越無章法,而且乍看之下,文章變成由幾乎相同的詞語組成。

 

FC2 的缺陷在於──第一,長篇文章加密後會更長,浪費空間。第二,解密時常失敗。

 

就這樣,在與FC4 合作的過程中,FC2 因為這兩個不可饒恕的錯誤告終。至於FC4 是用來對中文加密,一個建基於FC2 上的結構,FC3 則是為了連結兩者而誕生的一道函式橋樑。FC2 死亡後,這兩者即使不消失,也活不了多久。FC5 針對FC2 的錯誤進行修正,其結構相較於FC2 有極大的轉變,但是仍與FC4、FC3 連結,也沒什麼好下場。

 

FCix 縮寫自「FC Six」的單字連音,唸作「F-Six」,其原理是「玩弄ASCII」。一開始的FCix 只支援英文,原因是最大萬國碼ASCII 不知道在哪裡,這樣對Ponge 的定義等於未知,十分危險,而且加密出來的文章可想見不會雜亂,如果破解方列出所有ASCII 就能了解其原理。FCix 承襲Password 的傳統,根據使用者所給的一組密碼決定「如何玩弄ASCII」。

 

一個字串中每一個密碼字元位置是一個變數,用來決定「對來源字串中的哪些字元進行修改」,決定方法是其倍數。如果這個密碼位在第一個位置,那麼就修改所有位於1 的倍數的索引上的字元。

 

密碼字元則用來決定「如何修改該來源字元」,決定方法是利用該來源字元的ASCII 加上密碼字元(會是一個數值),然後用Chr 函式輸出另一個字元。

 

所有密碼都輪過一回,加密就完成了。解密的方法很好懂,把ASCII 減回去,其餘部分相同。

]Structure FCix

]Dim Password As String

]

]Function Crypt(ByVal OriginString As String) As String

]If (OriginString Is Nothing) Then

]Return Nothing

]End If

]For i1Pass As Integer = LBound(Password.ToCharArray) To UBound(Password.ToCharArray) Step 1

]Dim Origin As Char() = OriginString.ToCharArray

]OriginString = Nothing

]For i1Char As Integer = LBound(Origin) To UBound(Origin) Step 1

]If Not (i1Char Mod (i1Pass + 1) = 0) Then

]OriginString &= Origin(i1Char)

]Continue For

]End If

]If Not (Castle(Asc(Origin(i1Char)), Asc(" "), Asc("~")) = Asc(Origin(i1Char))) Then

]OriginString &= Origin(i1Char)

]Continue For

]End If

]OriginString &= AscPlus(Origin(i1Char), Val(Password(i1Pass)))

]Next

]Next

]Return OriginString

]End Function

]

]Functoin Discrypt(ByVal OriginString As String) As Stirng

]If (OriginString Is Nothing) Then

]Return Nothing

]End If

]For i1Pass As Integer = LBound(Password.ToCharArray) To UBound(Password.ToCharArray) Step 1

]Dim Origin As Char() = OriginString.ToCharArray

]OriginString = Nothing

]For i1Char As Integer = LBound(Origin) To UBound(Origin) Step 1

]If Not (i1Char Mod (i1Pass + 1) = 0) Then

]OriginString &= Origin(i1Char)

]Continue For

]End If

]If Not (Castle(Asc(Origin(i1Char)), Asc(" "), Asc("~")) = Asc(Origin(i1Char))) Then

]OriginString &= Origin(i1Char)

]Continue For

]End If

]OriginString &= AscPlus(Origin(i1Char), -Val(Password(i1Pass)))

]Next

]Next

]Return OriginString

]End Function

]

]Function AscPlus(ByVal Main As Char, ByVal Addition As Integer, Optional ByVal PongeLeast As Integer = 32, Optional ByVal PongeMost As Integer = 126) As Char

]Return Chr(Universe(Asc(Main) + Addition, PongeLeast, PongeMost))

]End Function

]

]Function CryptChinese(ByVal OriginString As String) As String

]CryptChinese = Nothing

]For i1 As Integer = LBound(OriginString.ToCharArray) To UBound(OriginString.ToCharArray) Step 1

]CryptChinese &= Format(AscW(OriginString(i1)), "00000")

]Next

]Dim Origin As Char() = CryptChinese.ToCharArray

]CryptChinese = Nothing

]For i1 As Integer = LBound(Origin) To UBound(Origin) Step 1

]CryptChinese &= Chr(Val(CInt(Asc("A") / 10)))

]Next

]Return CryptChinese

]End Function

]

]Function DiscryptChinese(ByVal OriginString As String) As String

]DiscryptChinese = Nothing

]For i1Char As Integer = LBound(OriginString.ToCharArray) To UBound(OriginString.ToCharArray) Step 1

]Dim TheAscii As Char() = Asc(OriginString(i1Char)).ToString.ToCharArray

]DiscryptChinese &= TheAscii(UBound(TheAscii))

]Next

]Dim Chinese As String = Toast(DiscryptChinese, 5)

]DiscryptChinese = Nothing

]For i1 As Integer = LBound(Chinese) To UBound(Chinese) Step 1

]Try

]DiscryptChinese &= ChrW(Val(Chinese(i1)))

]Catch except As Exception : End Try

]Next

]Return DiscryptChinese

]End Function

]

]Sub New(ByVal ThePassword As String)

]Dim CharArray As Char() = ThePassword.ToCharArray

]Password = Nothing

]For i1 As Integer = LBound(CharArray) To UBound(CharArray) Step 1

]If (IsNumeric(CharArray(i1))) Then

]Password &= CharArray(i1)

]Else

]Password &= AscW(CharArray(i1))

]End If

]Next

]End Sub

]End Structure

文章標籤
全站熱搜
創作者介紹
創作者 GPhettoH 的頭像
GPhettoH

歇息,等待明日的天空

GPhettoH 發表在 痞客邦 留言(0) 人氣(55)