PassGAN阅读笔记
作者:来自康奈尔大学
论文是发表在NeurIPS 2018机器学习安全研讨会上的论文的扩展版
背景和动机:
为什么要研究?
1.密码是最受欢迎的认证方式,主要是因为它很容易的实施,不需要其他的硬件或软件,用户和开发者都对密码非常熟悉。不幸的是,多个密码数据库泄露表明用户倾向于选择容易猜到的密码,主要由常见字符串和常见字符串的变种组成(比如:password,1234546,iloveyou)。
2.尽管有无数的选择,我们几乎看不到密码将会很快被取代的可能性。建立密码破译的限制能够有助于使基于密码的系统更安全。
3.近期的密码泄露包含数亿密码,为攻击者破坏系统提供一个强大的数据源,而且系统管理员也会重新评估密码策略。
现在已有方法:HashCat 和John the Ripper,能够让用户通过核对密码的哈希值每秒破译数百万密码。
缺点:1.这些规则在当前的数据集中表现良好,创造一个为新的数据集优化的新规则是一项费力的任务,要完成这项文物需要具备特定的专业知识。
2.他们是点对点并且基于用户如何选择密码的直觉,而不是从大型密码数据库的连贯性和原则性分析出来的。
3.用字典中的单词和之前泄露的密码作为候选人密码
本文方法:PassGAN,一种利用生成对抗网络(GANs)来增强密码破译的新方法。
优势:
1.PassGAN的出现表明基于规则的密码生成工具产生了实质性的改进,因为它是通过密码数据而不是利用手动分析,自动推断密码分布信息。因此,PassGAN能够毫不费力的利用新的密码泄露生成一个更丰富的密码分布。
2.GANs能够生成高质量的密码猜测,具有压倒性优势的数量的由PassGAN生成的密码不匹配我们的测试集但仍然“看起来像”人类生成的密码。
3.PassGAN的输出的质量可以和这些殿堂级的密码规则媲美。
4.PassGAN能够用来补充密码生成规则。
5.与密码生成规则相比,PassGAN能够生成几乎无限大的密码猜想。新的密码猜想的数量随着GAN生成的密码的总数量稳固增长。当前用规则生成的密码的数量,最终取决于实例化这些规则的密码数据集的规模。
基本概念:
A.深度学习(可不讲)
对深度学习的研究表明,可以有效地从数据中学习特征,而且手工编码的特点往往不入学习的特征。深度学习在数据使用中已经提出一些隐私问题,从训练模型中可以学到什么,以及模型可以学习到比给定任务更多的私人信息的能力。由于这个原因,研究人员提出了隐私保护协作学习技术,这个技术依赖于差别隐私。除了攻击那些从训练模块中提取出来的信息,最近发现可以细微的修改样例,这样它们在人类的眼睛里就好像没有被修改。但是始终被深度学习算法错误分类
B.生成对抗网络(GANs)Generative Adversarial Networks
生成对抗网络(GANs)代表了深度学习领域中的一个进步。GAN是由两个神经网络组成的,一个是生成式深度神经网络G,和一个判别式深度神经网络D。给定一个数据集S={X1,X2,……,Xn},G的目标是从潜在的概率分布Pr(x)中生成能够被D接受“伪”样例。与此同时,D的目标是尝试从真实样本S中分辨出G中的伪样本。更常见的是,输入一个简单的噪声分布Z,是被GANs解决了这个问题的优化。可以按照如下概括:

这个模块尝试最小化 θG ,同时最大化θD。学习阶段认为是完整的,当D不能够从区分出由G生产伪样本和S生产的真实样本产品。
GAN是深度学习工具,由两个深层神经网络组成:生成和判别。 深度学习在许多应用程序中用于从数据集生成新内容(即,扫描数千个面部或房间的图像以创建新的独特图像)。

为了使用PassGAN,我们要有一个不知道哪儿来的真实的密码数据集(也许是某东某讯某度泄漏的?)。从这个数据集里起码能知道人们真正使用的数据集大概长成什么样。一般就是有一些大写字母,一些日期,一些随机的数字,一些名字之类的。
然后呢,我们要用到一个噪声产生器,就是生成一些随机数用的。噪声产生器和密码数据集就是咱们神经网络模型的输入了。
网络的输出就是二分类值,也就是说在有监督训练的时候,网络模型会被告诉说这个密码是真实的还是假的。
在每次神经网络前向传递的时候,网络的输出都会跟真实的标签值进行比较,然后带着这个误差值反向传递回去迭代修改网络的权重。生成器也会跟着模型的训练而成长,因为随着网络模型变化,生成器根据噪声所产生的结果也越接近真实的密码。
当生成器训练完毕之后,之后我们再输入一个噪声,网络就能输出一个特别真实的密码。所以我们只要让PassGAN运行几个小时,就能得到一堆密码候选项了。

C. 密码破译
在密码爆破攻击中,对手会通过重复测试多个备选密码,尝试识别一个或多个用户的密码。
有两个非常受欢迎的现代密码破译工具Johnthe Ripper(JTR)和HashCat。这两个工具实施多种类型的密码破译策略,包括:基于字典的攻击;基于规则的攻击,其中包括从字典里的单词转换生成密码猜想,和基于Morkov模块的攻击。Narayanan等人把Markov模块用于生成密码破译。他们的方法是使用手动定义的密码规则。比如生成的密码的哪一部分是由字符和数字组成。基于Markov模块的技术已经用来实施实时密码强度估计,以及评估明文数据库中的密码强度。
研究思路:
**核心思想:**我们的核心观点是使用泄露的密码列表(真实样本)训练D。因此,每一次迭代,PassGAN的输出(伪样本)变得接近原始泄露中的密码的分布,而且因此更加匹配真正的用户的密码。
我们通过Gulraiani团队的IWGAN(Improved training of Wasserstein GANs)把PassGAN实例化。通过 ADAM优化器尽量介绍训练误差,减少模块输出和训练数据之间的不匹配。
实验设置:Experiment Setup
我们的模块用下面的超参数作为特征:
批次大小,迭代次数,每个发生器迭代的鉴别器迭代次数,维度模型,梯度惩罚系数,输出序列长度,输入噪声矢量的大小,最大示例数,Adam 优化
定下相对应的参数值就可以开始训练了。结果如下所示:
评估:
为了评估PassGAN的性能,把我们的实验中PassGAN的输出和通常用于JTR和HashCat的生成器规则进行比较。
A.GAN的训练和测试
要鉴定PassGAN的性能,并用它和最先进的密码生成规则做比较,首先,需要在RockYou泄露的一个大型密码集上对GAN,JTR和HashCat进行训练。
第一步:在RockYou泄露的一个大型密码集上对GAN,JTR和HashCat进行训练。进入这个数据集代表常见和复杂的密码的混合物,因为这些密码以明文形式存储在服务器上,因此他们都被恢复了。
第二步:计算在两个独立的测试集中每一个工具生成的密码数量:一个RockYou的不同于训练集的子集,一个LinkedIn密码数据集。
第三步:我们从大约3亿密码中选择所有长度小于等于10个字符的密码,并使用这些密码中的80%训练工具。我们用剩余的20%做测试。也会在LinkedIn数据集中所有的长度小于10 个字符的密码上测试每一个工具。LinkedIn的数据集中的密码可以作为哈希值,而不是明文。因此,LinkedIn数据集中只包含明文密码的工具,例如JTR和HashCat能够恢复。我们呈现在IV-B中的结果,表明用于恢复LinkecIn密码的规则和数据集基本上覆盖了用于这项工作的规则和数据集。(分离数据)
第四步:测试检验。
(1)在同样的密码分布中,PassGAN预测密码研究和测试工作做得有多好(如,把RockYou数据集用于训练和测试);
(2)PassGAN能否概括整个密码的数据集。即,当PassGAN在RockYou数据集研究以及在LinkedIn数据集测试时,会观测它是如何表现的。
(3)GAN的训练过程对输出的影响。训练GAN是一个迭代过程,由大量的迭代次数组成。随着迭代次数的增加,GAN从数据分布中学习到更多的信息。然而,增加步数也增加了过度拟合的可能性.要评估密码数据的权衡,我们存储中间训练检查点并在每一个检查点生成10^8个密码。

PassGAN在各个检查点上生成的唯一密码数量,与RockYou测试集相匹配。x轴表示PassGAN训练过程的迭代次数(检查点)。f 或者每个检查点,我们从PassGAN抽样了108个密码。
GAN生成的不重复的密码的个数,以及匹配到RockYou测试集的密码数量。X轴代表PassGAN训练过程的迭代次数(检查点)。PassGAN在每一个检查点生成一个总量大约为10^8的密码。

(4)结论:图1表明在GAN的每一个检查点生成的唯一密码数,以及能与RockYou测试集中的内容匹配的密码数量。图1显示了这些密码中有多少与Rock You测试集的内容相匹配。一般情况下,匹配次数随着迭代次数的增加而增加…这一增长大约在12.5万到13.5万次迭代后又减少了,同样的,在增加到了19万到19.5万次迭代后也有下降趋势,所以在那里我们停止了对GaN的训练。这表明进一步增加了 迭代可能会导致过度拟合,从而降低GaN生成多种高度可能的密码的能力。

B.评估PsaaGAN生成的密码
对比:我们用PassGAN,JTR,以及HashCat生成多达10^10个密码。
在JTR中,使用SpiderLabs重整规则;在HashCat中我们是用best64和gen2规则。
这些规则是密码破译著作中的常用规则,并且在包括RockYou和linkedIn在内的密码数据库中进行了多年优化。由于这些特定数据集优化组合,我们认为这些规则能够很好的表现最佳匹配性能,而最佳匹配性能可以通过手工生成规则获取。
作为我们的练习库,Best64和gen2都可以生成不到1010个密码(详见表I)。SpiderLabsmangling规则大约可以生成6*1010个密码。这就使我们可以在JTR和PassGAN之间进行公平比较,因为PassGAN可以通过一个10^10样本的数据集产生相同数量的不重复的密码。

PassGAN的分布测试图
在我们的比较中,我们的目标是确定PassGAN是否能够满足其他工具的性能,尽管它缺乏任何关于密码结构的先验知识。这是因为我们 主要感兴趣的是确定PassGAN从密码列表中自动提取的属性是否能够表示足够的信息来与最先进的人类基因竞争。 分级规则和马尔可夫密码生成过程。我们的结果表明,对于每个工具,PassGAN至少能够生成相同数量的匹配。此外,为了实现这一结果,PassGAN需要生成许多密码。 这在其他工具的一个数量级内。这对于RockYou和LinkedIn测试集都适用。这并不是意料之外的,因为其他工具依赖于先前的nole。 DGE对密码进行猜测,PassGAN没有。表2总结了RockYou测试集的结果,而表3显示了LinkedIn测试集的结果。我们的结果还表明,PassGAN在根据规则进行密码匹配方面具有优势,可以从与训练数据集不同的数据集中猜出密码。特别是PassGAN 在较少的尝试中,能够匹配比Hashcat更多的密码(LinkedIn为2.1·109-3.6·109,而Rockyo为4.8·109-5.06·109)。
C.将PassGAN与FLA进行比较
给定训练有素的FLA模型,FLA输出以下六个字段:1.密码,2.该密码的机率,3.估计的输出猜测数,即该密码的强度,4.随机试验的标准差,该密码的密码(以猜测次数为单位),5.此密码的测量次数;,6.猜测的估计置信区间数字(以猜测数为单位)中提出的评估,表明他们的技术优于Markov模型,PCFG和密码测试大型时,JTR和HashCat通常使用的合成规则
密码猜测的数量(在1010到1025之间)。我们认为,FLA的局限性之一恰恰在于用于估计密码的过程的马尔可夫性质。例如123456、12345;而123456789是RockYou中最常用的三个密码数据集,大约每66个密码中的一个。同样,FLA生成的最常见的密码以“ 123”开头或使用“ love”一词。相反,PassGAN最常生成的密码往往显示更多的可变性,包含名称,名称和数字组合的样本,以及其他。与RockYou训练集比较时,最有可能的样本PassGAN的产品与培训集及其概率更相似比FLA的要好。我们认为由于密码的马尔可夫结构FLA中的生成过程,未捕获的任何密码特征在n元语法的范围内,可能不会被FLA编码。例如,如果10个字符的密码的有意义的子集被构造为串联的两个词(例如MusicMusic)中,任何n≤5的马尔可夫过程都不会能够正确捕获此行为。另一方面,给定足够的示例次数,PassGAN中使用的神经网络将能够学习此属性。结果,虽然为密码pookypooky分配了概率p≈10-33
通过FLA(估计的猜测尝试次数约为1029次),在经过PassGAN大约108次尝试后猜到了。
为了进一步研究PassGAN和FLA之间的差异,我们计算了RockYou测试集中的密码数量FLA至少需要进行1010次尝试,并且PassGAN能够在它的第一个7·109个样本。尽管有些用户选择了这些密码,但这些密码是FLA分配低概率的密码。因为PassGAN可以为它们建模,我们得出的结论是,FLA分配给这些密码的概率不正确。图2给出了我们的结果,密码之间的比率为FLA在特定的猜测尝试次数下,并通过PassGAN在其内前7·109次尝试。我们的结果表明,PassGAN可以建模许多密码比FLA更正确。但是,随着FLA猜测密码所需的尝试次数增加了,即该密码的估计概率降低了。这表明,总体而言,这两个工具在为密码分配概率上达成了共识。

Ps:(马尔可夫性质(英语:Markov property)是概率论中的一个概念,因为俄国数学家安德雷·马尔可夫得名。当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质。具有马尔可夫性质的过程通常称之为马尔可夫过程。)
结论:
我们的实验表明,这种方式非常有前途。当我们在两个大的密码数据集中评估PassGAN时,我们平均超过John the Ripper的SpyderLab规则两倍,而且我们和HashCat的best64和gen2规则竞争——我们的结果在HashCat规则的两倍以内。更重要的是,当我们把PassGAN的输出和HashCat的输出结合起来时,我们大约比单独使用HashCat多匹配18%~24%的密码。这是非常引人注目的,因为它表明PassGAN能够产生相当数量的密码,远超过了当前的工具。我们在实验中发现,当GANs在RockYou的一个完全不同的子集中训练时,我们先从RockYou数据集中提取一个测试集,通过在这个测试集上训练发现GANs能够在测试集中匹配超过46%的密码。同基于规则的密码生成技术相比,我们的实验表明PassGAN非诚有竞争力。尽管HashCat 的Base64和gen2规则跑赢了PassGAN,我们的规则匹配的密码数量是JTR的SpyderLabs规则的两倍。而且,通过把GAN的输出和base64的输出结合起来,我们大概可以匹配RockYou数据集中超过78%的密码,以及LinkedIn数据集中大约27%的密码,这就意味着密码的匹配率分别上升了18%和24%。这是非常显著的成果,因为它表明 GAN能够生成大量的密码,而这是当最先进的密码生成工具不可能达到的。更多的,当我们在一个不同于训练集(RockYou)的数据集(LinkedIn)上评估密码破译工具时,GAN的匹配率的下降是不明显的。
作者原文:字符级GANS非常适合生成密码猜测。在我们的实验中,PassGAN能够匹配从RockYou密码数据集中提取的测试集中34.2%的密码。 在RockYou的另一个子集上训练。此外,当PassGAN接受关于RockYou密码集的培训时,我们能够匹配LinkedIn数据集中的21.9%的密码。这是非凡的b 由于PassGAN能够实现这些结果,而没有关于仅在测试数据集中存在的密码的附加信息。换句话说,PassGAN能够正确地猜测LAR。 通用电气的密码数量,它没有观察到,只是获得了一组样本。当前基于规则的密码猜测是非常有效的,但有限的。在我们的实验中,基于规则的系统能够与其他密码猜测工具相匹配或优于其他密码猜测工具。 埃西斯很小。这证明了熟练的安全专家有能力对规则进行编码,从而生成高概率的正确匹配。然而,我们的实验也证实了 基于规则的密码猜测的缺点是,规则只能生成有限的、相对较小的密码集。相反,帕斯加恩最终能够超过阿奇的比赛数量。 使用密码生成规则的VED。因此,最佳的密码猜测策略是使用多个工具。在我们的实验中,每种密码猜测方法在不同的设置中都有优势。我们的结果证实了结合m 最优的技术导致了最好的整体性能。例如,通过将PassGAN的输出与Best 64规则的输出相结合,我们能够匹配Rockyo中48%的密码 U测试数据集(代表匹配数量增加了50.8%)和LinkedIn数据集密码的30.6%–增加了73.3%。考虑到两个Pa的当前性能 ssGAN和fla,这并不是说单靠工具很快就能完全取代基于规则的密码猜测工具。
GANS具有足够的表现力,可以从马尔可夫进程、规则生成密码,并捕获更通用的密码结构。我们的实验表明,PassGAN与fla具有竞争力。 苯丙胺类兴奋剂密码猜测主要作为马尔可夫进程。在不了解密码规则或密码结构指南的情况下,PassGAN能够在m阶内匹配fla的性能。 通过仅仅利用它能够从有限的样本中提取的知识来进行猜测。此外,由于Gans是比马尔可夫模型更通用的工具,所以在我们的实验中,PassGA N能够生成匹配的密码,使用有限的猜测,Fla将其排列为非常不可能的密码。
GANS很好地推广到密码数据集,而不是它们的训练数据集。当我们在与训练集(RockYou[58])不同的数据集(LinkedIn[36])上评估PassGAN时,匹配量的下降 比率不高,特别是与其他工具相比。此外,当在LinkedIn上测试时,PassGAN能够在与RockYou相比较的较低或相同数量的猜测中匹配其他工具。最先进的甘斯密度估计仅对它们生成的空间子集是正确的。实验表明,IWGAN的密度估计与高频通训练集相匹配。 言语。这一点很重要,因为它允许PassGAN提前生成极有可能出现的候选密码。然而,我们的实验也表明,随着密码频率的降低, PassGAN的密度估计恶化。虽然这在PassGAN生成更多密码时变得不那么重要,但它表明PassGAN需要输出的密码数才能实现Partic。 如果使用更精确的密度估计的字符级GaN实例化,匹配的ull数就会显著减少。同样,一个更广泛的训练数据集 采用更复杂的神经网络结构,可以显著提高密度估计(进而提高PassGAN的性能)。

结束语:GANS估计训练数据集的密度分布。因此,PassGAN输出重复的密码猜测。而一个完整的蛮力猜测攻击会有全面的报道。 ,从培训数据分发中学习可以通过生成高可能性的猜测来执行更有效的攻击。因为密码生成可以脱机执行,PassGAN Coul D预先产生数十亿的猜测,并将它们存储在数据库中。在我们的实验中,我们存储了唯一的密码样本,然后将这些示例用于测试目的,从而避免了 重复。如果需要,还可以使用具有适当参数的Bloom过滤器来丢弃重复的条目,从而实现有效的在线密码猜测。显然,PassGAN可以在分布式设置中使用,其中有几个实例独立地输出密码猜测。虽然可以避免局部重复使用,例如,Bloom过滤器,co 协调在不同节点之间的重复的去除更加复杂,并且潜在地,更昂贵。解决此问题的适当方法主要取决于三个因素:(1)COS。 生成密码猜测的t;(2)测试密码猜测的成本;(3)在节点之间同步有关先前生成的密码的信息的成本。如果生成p的成本 关键词的测试成本低于测试成本,节点间的同步也不是免费的,因此避免节点间的重复并不是必要的。因此,每个模型都可以在不需要o的情况下进行采样。 f注意其他模型生成的样本。如果测试密码猜测的成本低于生成密码猜测的成本,那么在节点t之间周期性地进行协调可能是有益的。 o确定已经生成了哪些样本。同步成本决定了协调的频率。最后,PassGAN可以从新的泄漏密码数据集中显著受益和改进。该模型将通过学习新规则来改进,并且重复样本的数量可能是redu。 CED。
大总结:
在这篇论文中,我们介绍了PassGAN, 即第一个基于GAN的密码破译技术。我们的结果表明,字符级GANs用于密码破译是非常合适的,尤其是GANs在泄露的密码数据集上训练的时候。在一个密码数据集上训练GANS,然后在一个完全不同的分布式数据集上进行测试,发现GANs推演的很好。不同于当前的一些基于规则的工具,我们的密码破译方法是一个全新的改革,PassGAN能够在没有用户干预的情况下生成密码,因此不需要密码领域的知识,也不需要手工分析密码数据库泄露。我们对训练表现的评价说明,在提供一个足够大的已泄露密码库时,PsaaGAN的表现比当前基于规则的密码生成技术好得多。

作者原文:我们对PassGAN的性能进行了评估,方法是测试它能猜出密码是否经过训练,以及PassGAN输出的分布如何接近真实密码的分布。 埃克斯。我们的结果表明,Passgan与最先进的密码生成工具具有竞争力:在我们的实验中,Passgan总是能够生成与其他密码相同的匹配数。但是,与其他工具相比,PassGAN目前需要输出更多的密码。我们认为,当考虑到拟议技术的好处时,这一成本是可以忽略不计的。同样的,如果想在更大的数据集上训练PassGAN,可以使用更复杂的神经网络结构和更全面的训练。因此,底层的GaN可以执行更精确的密度测量。 y估计,从而减少了实现特定数目匹配所需的密码数。将PassGAN后面的生成模型更改为有条件的GaN可能会改善所有情况下的密码猜测,在这些场景中,对手知道用户通常使用的一组关键字(例如, 用户宠物和家庭成员的姓名)。有了这些知识,对手就可以将GaN限定在这些特定的词上,从而使生成器能够对特定的POR给予特别的关注。 这些关键字所在的搜索空间。PassGAN可以潜在地用于产生蜜月词[29]。蜜糖字是诱饵密码,当与真实密码混合时,密码数据库的价值大大减少。 e代表对手。Wang等人[66]对Juels等人先前提出的技术表示关切。[29]生成蜜糖词:如果可以很容易地将蜜糖单词与真实密码区分开来 ,那么它们的用处就大大降低了。对PassGAN的扩展可能会解决这个问题,并将成为今后工作的主题。

PassGAN阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. 数据结构~总结与文章目录
  2. 利用T-SQL语句快速清理ZBLOG程序的SQL SERVER2012数据库内容
  3. 重磅:Elasticsearch上市!市值近50亿美元
  4. JSP的getRequestDispatcher()与sendRedirect()的区别
  5. .Net在线编辑工具.NET Fiddle
  6. Win7和Ubuntu14.10双系统
  7. MongoDB 教程一: 安装和使用 (Mongodb启动命令mongod参数说明)
  8. leetcode二叉树 找路径_LeetCode0257: 二叉树的所有路径
  9. java8获取路径_创建和读取目录
  10. Apache POI (JAVA处理Office文档的类库)
  11. JavaScript 教程 (详细 全面)
  12. 计算机软件配置项(转),如何将表格转换配置导入另一台计算机 - 应用技巧 - 常青藤软件工作室...
  13. 企业无线产品认证好吗
  14. [基本功练习素材]播音初学者资料—口部操,唇舌力量控制;声母韵母难点练习
  15. 图形镜像对称(示意图)
  16. 服务器wifi无线放大器,旧路由器改wifi放大器详细教程【图】
  17. ubuntu 下的开机启动项管理命令
  18. 思科模拟器 --- 三层交换机实现VLAN间路由
  19. 【Windows】一款优秀的CMD替代软件-cmder
  20. 万维网c语言程序设计题库,大学计算机基础考试题库-20210508100506.doc-原创力文档...

热门文章

  1. 安装科来-csnas_tech_12.0.5.12506_x64
  2. 色彩空间与色彩深度。详细分析相机中sRGB/AdobeRGB、RAW/JPG到底该怎么选
  3. STM32 硬件IIC 锁死及复位问题
  4. 快速隐藏/取消隐藏工作表
  5. python教程(八)之异常(8.Warn)
  6. 尘埃4 for Mac(DiRT4赛车竞速游戏)原生版
  7. 水水的证件-身份证、证件加水印小工具
  8. Springboot使用Curator 集成zk
  9. PAT(甲级)2020年春季考试 7-2 The Judger (25 分) 经验分享与心路历程
  10. 威胁猎人 | 2018年上半年短视频行业黑灰产研究报告