Я думаю, чтобы сделать его легко расшифровать потом, вы должны к нему несколько в линии кодирования base64, первый кодирующий все к нормализованной двоичной строки, затем закодировать в диапазоне вы хотите (с использованием бинарного, это должно быть то, что соответствует 2^X).
Чтобы соответствовать диапазону, я использовал baseset из 32, и простого кодирования декодирования примера (немного более многословный, что она должна быть, возможно)
Module Module1
Dim encodeChars As String = "abcdefghijklmnopqrstuvwxyzABCDEF" ' use 32 as a base
Function Encode(text As String) As String
Dim bitEncoded As String = ""
Dim outputMessage As String = ""
For Each ch As Char In text.ToCharArray()
Dim i As Integer = Convert.ToByte(ch)
bitEncoded &= Convert.ToString(i, 2).PadLeft(8, "0"c)
Next
While bitEncoded.Length Mod 5 <> 0
bitEncoded &= "0"
End While
For position As Integer = 0 To bitEncoded.Length - 1 Step 5
Dim range As String = bitEncoded.Substring(position, 5)
Dim index As Integer = Convert.ToInt32(range, 2)
outputMessage &= encodeChars(index).ToString()
Next
Return outputMessage
End Function
Function Decode(encodedText As String) As String
Dim bitEncoded As String = ""
Dim outputMessage As String = ""
For Each ch In encodedText
Dim index As Integer = encodeChars.IndexOf(ch)
If index < 0 Then
Throw New FormatException("Invalid character in encodedText!")
End If
bitEncoded &= Convert.ToString(index, 2).PadLeft(5, "0"c)
Next
' strip the extra 0's
While bitEncoded.Length Mod 8 <> 0
bitEncoded = bitEncoded.Substring(0, bitEncoded.Length - 1)
End While
For position As Integer = 0 To bitEncoded.Length - 1 Step 8
Dim range As String = bitEncoded.Substring(position, 8)
Dim index As Integer = Convert.ToInt32(range, 2)
outputMessage &= Chr(index).ToString()
Next
Return outputMessage
End Function
Sub Main()
Dim textToEncode As String = "This is a small test, with some special characters! Just testing..."
Dim encodedText As String = Encode(textToEncode)
Dim decodedText As String = Decode(encodedText)
Console.WriteLine(textToEncode)
Console.WriteLine(encodedText)
Console.WriteLine(decodedText)
If Not String.Equals(decodedText, textToEncode) Then
Console.WriteLine("Encoding/decoding failed!")
Else
Console.WriteLine("Encoding/decoding completed succesfully!")
End If
Console.ReadLine()
End Sub
End Module
это даст вам следующий вывод?
This is a small test, with some special characters! Just testing...
krugsCzanfzsayjaonwwcBdmebAgkCBufqqhoAlunaqhgBBnmuqhgCdfmnuwcBbamnugcCtbmnAgkCtteeqeuDltoqqhizltoruwCzzofyxa
This is a small test, with some special characters! Just testing...
Encoding/decoding completed succesfully!
Это было бы трудно декодировать тогда? : D как вы узнаете, сколько раз вы отступили? ascii имеет 255 кодов и вы хотите использовать только до Z? вам придется конвертировать в стиле base64, сначала преобразовать его в биты, а затем разбить на нужный диапазон. – Icepickle
@Icepickle ASCII имеет 128 символов, пронумерованных от 0 до 127. Строка .NET ('TextBox1.Text') имеет юникодные/UTF-16 кодовые единицы. (PadLeft 8 в вашем ответе должен быть 16). –