如何用神经网络来恢复破损的密码?
admin
2023-07-31 00:38:39
0

在这份教程中,我们将会学习到如何使用神经网络来恢复破损的密码。如果你对 DiscreteHopfield 网络算法不是很了解的话,你可以通过阅读这篇 教程 来加强了解。

在开始实验之前,我们需要先设置一个种子参数使所有实验结果都可以重现。但是,没有这个参数程序也能正常工作。

12345 import randomimport numpy as np np.random.seed(0)random.seed(0)

如果所安装的Python版本或库版本过低,导致你无法重现上面的结果,你可以自行安装我们在这份教程中所需要的库。

123456789 >>> import neupy>>> neupy.__version__\’0.1.0\’>>> import numpy>>> numpy.__version__\’1.9.2\’>>> import platform>>> platform.python_version()\’3.4.3\’

所有的代码同样在Python2.7的环境中编译通过。

数据转换

在建立用于存储和恢复密码的神经网络之前,我们需要先转换输入输出的数据。但是,仅仅对其编码是不够的,我们应当为输入数据设置一个固定长度以确保字符串之间的长度一致。我们也要预先决定使用什么编码方式,为了简单易懂,我们选择ASCII码。现在让我们来定义用于将数据转换成二进制列表的函数吧。

12345678910111213141516 def str2bin(text, max_length=30):    if len(text) > max_length:        raise ValueError(\”Text can\’t contains more \”                         \”than {} symbols\”.format(max_length))     text = text.rjust(max_length)     bits_list = []    for symbol in text:        bits = bin(ord(symbol))        # Cut `0b` from the beggining and fill with zeros if they        # are missed        bits = bits[2:].zfill(8)        bits_list.extend(map(int, bits))     return list(bits_list)

这个函数需要传入两个参数,第一个是我们需要对其编码的字符串,第二个则为设定传入字符串的最大长度。只有传入字符串的长度小于最大长度,程序才会继续执行。

然我们来看看 str2bin 的 输出情况

1234 >>> str2bin(\”test\”, max_length=5)[0, 0, 1, 0, 0, 0, 0, 0, 0, ... ]>>> len(str2bin(\”test\”, max_length=5))40

ASCII 编码使用八个字节来存放一个字符,而我们这里将每个字符串最大长度设置为5。所以我们的向量长度等于40。从第一个输出结果可以看到,第一组八个符号 00100000 在 ASCII 表中表示空格。

在完成密码恢复过程的预处理之前,我们得到的总是一个 二进制的的列表。所以在我们将数据存到神经网络里面之前,我们需要在定义个函数用来将列表中二进制转回字符串。(差不多与前一个函数功能相反)

1234567891011 def chunker(sequence, size):    for position in range(0, len(sequence), size):        yield sequence[position:position + size] def bin2str(array):    characters = []    for binary_symbol_code in chunker(array, size=8):        binary_symbol_str = \’\’.join(map(str, binary_symbol_codelass=\”crayon-h\”> = \’\’.join(map(str, binary_symbol_code\”font-weight: normal\”>在这份教程中,我们将会学习到如何使用神经网络来恢复破损的密码。如果你对 DiscreteHopfield 网络算法不是很了解的话,你可以通过阅读这篇 教程 来加强了解。

在开始实验之前,我们需要先设置一个种子参数使所有实验结果都可以重现。但是,没有这个参数程序也能正常工作。

12345 import randomimport numpy as np np.random.seed(0)random.seed(0)

如果所安装的Python版本或库版本过低,导致你无法重现上面的结果,你可以自行安装我们在这份教程中所需要的库。

123456789 >>> import neupy>>> neupy.__version__\’0.1.0\’>>> import numpy>>> numpy.__version__\’1.9.2\’>>> import platform>>> platform.python_version()\’3.4.3\’

所有的代码同样在Python2.7的环境中编译通过。

数据转换

在建立用于存储和恢复密码的神经网络之前,我们需要先转换输入输出的数据。但是,仅仅对其编码是不够的,我们应当为输入数据设置一个固定长度以确保字符串之间的长度一致。我们也要预先决定使用什么编码方式,为了简单易懂,我们选择ASCII码。现在让我们来定义用于将数据转换成二进制列表的函数吧。

12345678910111213141516 def str2bin(text, max_length=30):    if len(text) > max_length:        raise ValueError(\”Text can\’t contains more \”                         \”than {} symbols\”.format(max_length))     text = text.rjust(max_length)     bits_list = []    for symbol in text:        bits = bin(ord(symbol))        # Cut `0b` from the beggining and fill with zeros if they        # are missed        bits = bits[2:].zfill(8)        bits_list.extend(map(int, bits))     return list(bits_list)

这个函数需要传入两个参数,第一个是我们需要对其编码的字符串,第二个则为设定传入字符串的最大长度。只有传入字符串的长度小于最大长度,程序才会继续执行。

然我们来看看 str2bin 的 输出情况

1234 >>> str2bin(\”test\”, max_length=5)[0, 0, 1, 0, 0, 0, 0, 0, 0, ... ]>>> len(str2bin(\”test\”, max_length=5))40

ASCII 编码使用八个字节来存放一个字符,而我们这里将每个字符串最大长度设置为5。所以我们的向量长度等于40。从第一个输出结果可以看到,第一组八个符号 00100000 在 ASCII 表中表示空格。

在完成密码恢复过程的预处理之前,我们得到的总是一个 二进制的的列表。所以在我们将数据存到神经网络里面之前,我们需要在定义个函数用来将列表中二进制转回字符串。(差不多与前一个函数功能相反)

1234567891011 def chunker(sequence, size):    for position in range(0, len(sequence), size):        yield sequence[position:position + size] def bin2str(array):    characters = []    for binary_symbol_code in chunker(array, size=8):        binary_symbol_str = \’\’.join(map(

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...