我正在尝试使用Visual Basic创建替代密码。我是编程新手,正在努力,所以请提供一些支持。
密码应执行以下操作:
例:
我需要帮助的主要部分是2和3。我需要知道的是解决这个问题的步骤(英语或语法),然后我可以尝试自己编写代码。如果你有一个很好的例子。
请注意,我不是在寻求有关如何创建凯撒密码的帮助。这里的替换密码将用另一个字符(即密钥)替换每个字母。
谢谢。
假设字母表中的键长度相同,可以执行FOR循环,检查字符串中的每个字符(该字符与键的关系)。
比如你的消息“你好”。
这不是实际的代码,只是为了演示您所问问题的概念:
for each letter in message
position_in_alphabet = current_letter
cipher_letter = key(position_in_alphabet)
append cipher_letter to cipher_message
例如,“hello”是5个字符。所以这个循环会循环5次。字母表中的位置是(8、5、12、12、15)。插入与键相关的内容,就会得到“qlnr”(或按键的指示)。
把它们放在一起,看起来像:
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
请尝试以下链接:
http://msdn.microsoft.com/en-us/library/ms172831.aspx
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/17bafd2b-e187-427d-9c39-4865b15b6f9a/
使用字符串作为密钥在vb.net中安全(ish)加密/解密算法
我不懂任何Visual Basic,所以我不能给你代码,但既然你说用英语解释是可以接受的,让我试着把你的步骤分成更小的步骤,你可能会发现更容易实现:
>
首先,您需要从用户那里获取消息,例如要求他们键入(或复制
接下来,对密钥执行同样的操作。(你可能应该构建你的程序,这样,如果密钥被证明是无效的——这可以在下一步方便地进行检查——你可以回到这一步,并要求一个新的密钥。)您可能希望立即将密钥转换为所有小写(或所有大写),并检查其是否正好包含26个字符。
接下来,您应该将键字符串转换为要替换为哪个字母的映射。(这可能不是必需的:有些语言提供现成的字符串音译函数,比如PHP的strtr
,它可以直接使用这样一个键字符串,但我假设您希望“从头开始”这样做。)这可能有点复杂,所以我将把它分成几个小步骤:
>
首先,需要创建map对象。希望VB能提供某种方式来表示从字符到字符(或从单字母字符串到单字母字符串)的映射,可能称为“字典”或“哈希表”。
接下来,您需要遍历键串的字符。通常有两种方法来做到这一点:要么将键串分割成一个字符列表(或单字母子字符串)并遍历该列表,要么使用从1到字符串长度的索引i进行循环,并在每次迭代中从字符串中提取第i个字符。在这两种情况下,您还需要跟踪(或计算)字母表中的第i个字母。
现在,假设你有两个变量:k包含键串中的第i个字母,a包含字母表中的第i个字母。现在,只需在字典/哈希表/VB中的任何名称中插入一个从k到a的映射项。如果您的输入消息可以同时包含大写和小写字母,那么应该为k和a的大写和小写版本插入一个映射条目。此外,对于解密,只需交换k和a,以便字典从a映射到k。
>
这也是检查密钥有效性的好时机:在插入从k到a的映射条目之前,检查是否已经有从k到其他字母的映射条目。如果有,中止,让用户知道密钥无效,并要求新的密钥。这将确保密钥没有重复的字母,这(加上它有26个字母长的事实)确保它是字母表的有效排列。哦,显然你也应该检查k实际上是一个字母,而不是标点符号。
(对于解码,这有点棘手;您可能需要构建两个映射,每个方向一个,这样您就可以使用k-to-a映射进行有效性检查。)
最后,您可以使用构建的映射对消息进行编码:只需在消息中的每个字符上循环,检查是否在映射中找到它,如果找到,则用映射到的字符替换它。(如果不能修改原始消息字符串,可以将每个输出字符附加到一个字符列表中,然后将它们全部合并到一个字符串中。或者从一个空的输出字符串开始,直接将每个输出字符附加到该字符串中,尽管这可能比先建立一个列表效率低,具体取决于VB中字符串操作的实现方式。)
我试图建立一个替代密码。对于我的密钥,我使用一个随机的256字节数组,它是256个可能字节值的排列。 这是通过以下方式设置的: 然后,我用以下方法对消息进行编码/解码: 在这个过程中,有些东西出了问题,我解码的任何东西都会作为一个 我不确定自己哪里出错了,也不确定这是否是最高效的做事方式,我必须保持相同的函数签名和通用方法,但实现细节由我决定。 感谢任何和所有的帮助。
问题内容: 键入密码短语时 每个人都能听到敲击空格键的声音,因此在密码字段中显示空格也很合逻辑。所以我想要一些可以显示的东西 代替 这将使键入更加容易,同时几乎不降低安全性。 更新 更新Riduidel的评论之前请三思。当布鲁斯·施耐尔(Bruce Schneier)写 “是时候以明文形式显示大多数密码了”时 ,那么显示其中的一小部分也必须是正确的。尤其是显示仅通过聆听即可捕获的部分。 问题答案:
我有一个应用程序,基于视图控制器的状态栏外观设置为。我的一些视图是深色的,一些视图是浅色的,应用程序有一个相当复杂的视图控制器层次结构,但它可以完美地将适当的方法子类化和重写,并与模式视图(捕捉呈现样式等)相结合。 然而,我需要一种全局的方式来查看顶部的特定项目(在状态栏后面,在我的应用程序边界内),就像顶部的个人热点/GarageBand录音/通话等栏一样。由于栏的背景颜色,我想在显示栏时覆盖状
简单替换密码是最常用的密码,包括为每个密文文本字符替换每个纯文本字符的算法。 在这个过程中,与凯撒密码算法相比,字母表是混乱的。 例子 (Example) 简单替换密码的密钥通常由26个字母组成。 一个示例关键是 - plain alphabet : abcdefghijklmnopqrstuvwxyz cipher alphabet: phqgiumeaylnofdxjkrcvstzwb 使用
众所周知,是无法修复的(有关更多信息,请参见本问题中的讨论)。 关于替代方案和“我如何做得对”的最后一个问题已经有几年的历史了: null 类将实现的某种接口:. 深度复制。如果的istance引用的实例,则应引用新的. 复制到指定的目标:. 多态复制:如果扩展,则应将的所有属性从复制到。 当然,我可以自己实现所有这些,但是有标准接口不是很合理吗?还是我漏掉了什么? 我的上下文的一点背景。我经常使
本文向大家介绍DBeaver一款替代Navicat的数据库可视化工具,包括了DBeaver一款替代Navicat的数据库可视化工具的使用技巧和注意事项,需要的朋友参考一下 对于很多开发者来说,Navicat这个软件并不陌生, 相信这个彩虹色图标的软件,有效的帮助了你的开发工作。从前上学的时候,我都是用的都是从网上找来的密钥进行破解的,但是一直在寻找有没有一个能找到一个免费的能完美替代Navicat