我正在尝试使用Visual Basic创建替换密码。我是编程和挣扎的新手,所以请一定的支持。
密码应该执行以下操作:
示例:
我需要帮助的主要部分是2和3.我需要知道的是解决这个问题的步骤(英语或语法)然后我可以尝试自己编写代码。如果你有一个很好的例子。
请注意,我并不是在寻求有关如何创建凯撒密码的帮助。这里的替换密码将用另一个字符(这是关键字)替换每个字母。
感谢。
答案 0 :(得分:0)
请尝试以下链接:
http://msdn.microsoft.com/en-us/library/ms172831.aspx
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/17bafd2b-e187-427d-9c39-4865b15b6f9a/
Secure(ish) encryption/decryption algorithms in vb.net using a string as a key
答案 1 :(得分:0)
我不知道任何Visual Basic,所以我不能给你代码,但既然你说英语的解释是可以接受的,那么让我试着把你的步骤分解成你可能更容易找到的小步骤实现:
首先,您需要从用户那里获取消息,例如要求他们在字符串中键入(或复制和粘贴)。我假设你知道如何在VB中做到这一点,因为我没有。
接下来,为密钥执行相同操作。 (您可能应该构建您的程序,以便,如果密钥结果无效 - 可以在下一步中方便地检查 - 您可以循环回到此步骤并要求新密钥。)您可能希望立即转换所有小写(或全部大写)的关键,并检查它是否有26个字符。
接下来,您应该将关键字符串转换为要替换哪些字母的地图。 (这个strtr
,它可以直接使用这样的键字符串,但我想你想要这样做“从头开始“。”这可能有点牵扯,所以我会把它分解成更小的步骤:
首先,您需要创建地图对象。 VB希望提供一些表示从字符到字符(或从单字母字符串到单字母字符串)的地图的方法,可能是“字典”或“哈希表”。
接下来,您需要遍历键字符串的字符。通常有两种方法可以做到这一点:将密钥字符串拆分为字符列表(或单字母子字符串)并循环遍历,或者只循环索引 i 从1运行到字符串的长度,并在每次迭代时从字符串中提取 i -th字符。在任何一种情况下,您还需要跟踪(或计算) i 字母表中的字母。
现在,假设您现在有两个变量: k ,其中包含键字符串中的 i - 字母, a 在字母表中包含 i 字母。现在,只需将 k 的条目映射到 a 到您的字典/散列表/无论在VB中调用它。如果输入消息可以包含大写和小写字母,则应为 k 和 a 的大写和小写版本插入映射条目。此外,对于解密,只需交换 k 和 a ,以便字典从 a 映射到 k 。< / p>
这也是检查密钥有效性的好时机:在将地图条目从 k 插入 a 之前,请检查是否存在已经是从 k 到其他一些字母的地图条目。如果有,则中止,让用户知道密钥无效并要求输入新密钥。这将确保密钥没有重复的字母,这(以及它的长度为26个字母的事实)确保它是字母表的有效排列。哦,你显然也应该检查 k 实际上是一个字母,而不是一个标点字符。
(对于解码,这有点棘手;您可能想要构建两个地图,每个方向一个,这样您就可以使用 k -to- a 有效性检查地图。)
最后,您可以使用您构建的地图对消息进行编码:只需遍历消息中的每个字符,检查它是否在地图中找到,如果是,则将其替换为映射到的字符。 (如果你不能修改原始的消息字符串,你可以将每个输出字符附加到一个字符列表,然后最后将它们全部连接成一个字符串。或者只是从一个空的输出字符串开始,并直接将每个输出字符附加到它,虽然可能效率低,取决于VB中的字符串操作的实现方式,而不是首先构建列表。)
答案 2 :(得分:0)
假设你的字母表的长度是相同的, 你可以做一个FOR循环来检查字符串的每个字符(该字符与你的密钥的关系)。
例如,您的消息&#34; hello&#34;。
这不是真正的代码,只是为了展示您所问的内容的概念:
for each letter in message
position_in_alphabet = current_letter
cipher_letter = key(position_in_alphabet)
append cipher_letter to cipher_message
例如,&#34;你好&#34;是5个字符。所以这个循环将循环5次。 字母表中的位置是(第8,第5,第12,第12,第15)。 你插入与密钥相关的内容,然后你得到了&#34; qlnnr&#34; (或者关键要求)。
总而言之,它看起来像:
Dim _message As String = "hello"
Const _plain As String = "abcdefghijklmnopqrstuvwxyz"
Const _key As String = "kxgtlmpqbwcnderfahjusviyoz"
Dim charPos As Integer = 0
Dim Cipher As String = ""
For i = 0 To _message.Length - 1
charPos = _plain.IndexOf(_message(i))
Cipher = Cipher & _key(charPos)
Next i
相反,查找密钥相对于密钥的位置,然后将其放入明文字典中,如下所示:
Dim _cipher As String = "qlnnr"
Const _plain As String = "abcdefghijklmnopqrstuvwxyz"
Const _key As String = "kxgtlmpqbwcnderfahjusviyoz"
Dim charPos As Integer = 0
Dim Message As String = ""
For i = 0 To _message.Length - 1
charPos = _key.IndexOf(_cipher(i))
Message = Message & _plain(charPos)
Next i