วันพฤหัสบดีที่ ๔ ตุลาคม พ.ศ. ๒๕๕๐

เข้ารหัส/ถอดรหัส ด้วย Monoalphabetic Substitution Cipher โดยใช้ VB.NET (Monoalphabetic Substitution Cipher with VB.NET)

(ผมได้ทำการ implement การเข้าและถอดรหัส Monoalphabetic Substitution Cipher นี้ เป็น project ใน codeplex.com แล้วนะครับ ถ้าต้องการดูตัวอย่าง source code ซึ่งตอนนี้คือ version 1.0 beta กรุณาไป download ที่ http://www.codeplex.com/MonoalphabetCipher)

การเข้ารหัส/ถอดรหัสด้วยอัลกอรึทึม Monoalphabetic Substitution นั้น ถือว่าไม่มีความสลับซับซ้อนทางคณิตศาสตร์แต่อย่างใด เพียงมีตารางการแทนที่ที่ตกลงกันไว้เท่านั้น ตัวอักษรที่จะนำแทนที่ก็กำหนดได้อย่างอิสระ ไม่จำเป็นต้องเรียงลำดับตัวอักษร ดังรูป ซึ่งในการเขียนโปรแกรม อาจนำชุดตัวอักษรสำหรับแทนที่มาเก็บเป็น key

ตัวอย่างโค้ดการเข้ารหัสแบบ Monoalphabetic Substitution Cipher

'Key ในที่นี้ ต้องเป็นตัวอักษรภาษาอังกฤษ 26 ตัว
'ซึ่งต้องไม่ซ้ำกัน และเป็นตัวเล็กหรือตัวใหญ่ก็ได
Function Encrypt(ByVal PlainText As String, ByVal Key As String) As String
Dim CharArray(PlainText.Length - 1) As Char
Dim KeyTable As New System.Collections.Specialized.ListDictionary

'สร้างตารางแทนที่ โดยให้ 65,97 คือ A,a ... 90,122คือ Z,z
For Count As Byte = 0 To 25
KeyTable.Add((Count + 65).ToString, Key(Count).ToString.ToUpper)
KeyTable.Add((Count + 97).ToString, Key(Count).ToString.ToLower)
Next

For Count As Byte = 0 To PlainText.Length - 1
'แปลงตัวอักษรใน plain text เป็นรหัส ASCII
'แล้วนำรหัส ASCII ไปหาค่าในตารางแทนที่
CharArray(Count) = KeyTable.Item(Asc(PlainText(Count)).ToString)
Next

Return CharArray
End Function

ตัวอย่างโค้ดการเข้ารหัสแบบ Monoalphabetic Substitution Cipher

Function Decrypt(ByVal CipherText As String, ByVal Key As String) As String
Dim CharArray(CipherText.Length - 1) As Char
Dim KeyTable As New System.Collections.Specialized.ListDictionary

'สร้างตารางแทนที่ โดยให้ A,a คือ 65,97 ... Z,z คือ 90,122
For Count As Byte = 0 To 25
KeyTable.Add(Key(Count).ToString.ToUpper, (Count + 65).ToString)
KeyTable.Add(Count).ToString.ToLower, (Count + 97).ToString)
Next

For Count As Byte = 0 To CipherText.Length - 1
'หารหัส ASCII จากตารางแทนที่ แล้วนำไปแปลงเป็นตัวอักษร
CharArray(Count) = Chr(KeyTable.Item(CipherText(Count).ToString))
Next

Return CharArray
End Function


แหล่งข้อมูล :
Substitution cipher
โปรแกรม encrypt/decrypt ด้วย monoalphabetic
Monoalphabetic Cipher - The Black Chamber

Related Post