可乐瓶的小辣椒

爱跳舞的小姑凉。

突然翻到自己2年前的舞蹈排练照,那时候还圆圆是个小胖子。嘿嘿

常见的用户密码加密及破解方法

用户密码安全是互联网行业需要保障的重要安全之一,由于黑客的入侵和内部的泄露,保证用户密码安全并不是件容易的事情,但如果采用合适的算法加密用户密码,即使信息泄露出去,黑客也无法还原出原始的密码(或者还原的代价非常大)。也就是说我们可以将工作重点从防止泄露转换到防止黑客还原出数据。下面我们将分别介绍用户密码的加密方式以及主要的破解方法。

一、用户密码加密

用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什么方式来保护用户的密码呢?以下几种方式是常见的密码保存方式:

 直接明文保存,比如用户设置的密码是“123456”,直接将“123456”保存在数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。

 使用对称加密算法来保存,比如3DES、AES等算法,使用这种方式加密是可以通过解密来还原出原始密码的,当然前提条件是需要获取到密钥。不过既然大量的用户信息已经泄露了,密钥很可能也会泄露,当然可以将一般数据和密钥分开存储、分开管理,但要完全保护好密钥也是一件非常复杂的事情,所以这种方式并不是很好的方式。

 使用MD5、SHA1等单向HASH算法保护密码,使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。

 特殊的单向HASH算法,由于单向HASH算法在保护密码方面不再安全,于是有些公司在单向HASH算法基础上进行了加盐、多次HASH等扩展,这些方式可以在一定程度上增加破解难度,对于加了“固定盐”的HASH算法,需要保护“盐”不能泄露,这就会遇到“保护对称密钥”一样的问题,一旦“盐”泄露,根据“盐”重新建立彩虹表可以进行破解,对于多次HASH,也只是增加了破解的时间,并没有本质上的提升。

PBKDF2算法,该算法原理大致相当于在HASH算法基础上增加随机盐,并进行多次HASH运算,随机盐使得彩虹表的建表难度大幅增加,而多次HASH也使得建表和破解的难度都大幅增加。使用PBKDF2算法时,HASH算法一般选用sha1或者sha256,随机盐的长度一般不能少于8字节,HASH次数至少也要1000次,这样安全性才足够高。一次密码验证过程进行1000次HASH运算,对服务器来说可能只需要1ms,但对于破解者来说计算成本增加了1000倍,而至少8字节随机盐,更是把建表难度提升了N个数量级,使得大批量的破解密码几乎不可行,该算法也是美国国家标准与技术研究院推荐使用的算法。

bcrypt、scrypt等算法,这两种算法也可以有效抵御彩虹表,使用这两种算法时也需要指定相应的参数,使破解难度增加。

下表对比了各个算法的特性:

二、用户密码破解

用户密码破解需要针对具体的加密方式来实施,如果使用对称加密,并且算法足够安全(比如AES),必须获取到密钥才能解密,没有其它可行的破解方式。

如果采用HASH算法(包括特殊HASH),一般使用彩虹表的方式来破解,彩虹表的原理是什么呢?我们先来了解下如何进行HASH碰撞。单向HASH算法由于不能进行解密运算,只能通过建表、查表的方式进行碰撞,即将常用的密码及其对应的HASH值全计算出来并存储,当获取到HASH值是,直接查表获取原始密码,假设用MD5算法来保护6位数字密码,可以建如下表:

全表共100W条记录,因为数据量不大,这种情况建表、查表都非常容易。但是当密码并不是6位纯数字密码,而是数字、大小写字母结合的10位密码时,建立一个这样的表需要(26+26+10)^ 10 ≈ 83亿亿(条记录),存储在硬盘上至少要占用2000W TB的空间,这么大的存储空间,成本太大,几乎不可行。有什么办法可以减少存储空间?一种方法是“预计算哈希链”,“预计算哈希链”可以大幅减少HASH表的存储空间,但相应的增加了查表时的计算量,其原理大致如下:

建表过程:

先对原始数据“000000”进行一次HASH运算得到“670B1E”,再对HASH值进行一次R运算,R是一个定制的算法可以将HASH值映射到明文空间上(这里我们的明文空间是000000~999999),R运算后得到“283651”,再对“283651”进行hash运算得到“1A99CD”,然后在进行R运算得到“819287”,如此重复多次,得到一条哈希链。然后再选用其它原始数据建立多条哈希链。最终仅将链头和链尾保存下来,中间节点全都去掉。

查表过程:假设拿到了一条HASH值“670B1E”,首先进行一次R运算,得到了“283651”,查询所有链尾是否有命中,如果没有,则再进行一次HASH、一次R,得到了“819287”,再次所有链尾,可以得到看出已经命中。这样我们就可以基本确认“670B1E”对应的明文就在这条链上,然后我们把这条链的生成过程进行重新计算,计算过程中可以发现“000000”的HASH值就是“670B1E”,这样就完成了整个查表过程。这种表就是“预计算哈希链”。这种方式存在一个问题,多条链之间可能存在大量的重复数据,如下图所示:

为了解决这个问题,我们将R算法进行扩展,一条链上的多次R运算采用不同的算法,如下图:

一条链上的每个R算法都不一样,就像彩虹的每层颜色一样,因此取名的为彩虹表。

当然彩虹表除了可以用户破解HASH算法外,理论上还可以用于破解对称加密算法,比如DES算法,由于DES算法密钥比较短,建立彩虹表破解是完全可行的;但对于AES算法,由于密钥比较长,建表几乎不可行(需要耗时N亿年)。

三、总结

采用PBKDF2、bcrypt、scrypt等算法可以有效抵御彩虹表攻击,即使数据泄露,最关键的“用户密码”仍然可以得到有效的保护,黑客无法大批量破解用户密码,从而切断撞库扫号的根源。当然,对于已经泄露的密码,还是需要用户尽快修改密码,不要再使用已泄露的密码。


【图解】最流行的7个JavaScript 框架各自的优点

js框架就是对js各种功能的封装和抽象,使得在使用的时候具有简便性和更好的兼容性,并且可以扩展框架中的内容,本文将给大家介绍目前流行的7个JavaScript 框架的特点。

AngularJ.js 由Google开发,2009年首次发布

  • 很流行的前端框架

  • 使用Angular.js创建第一个UI,成本很低

  • 对于团队来说,AngularJ.js有许多很棒的工具可用

  • 很适合创建一个快速、混合型复杂的解决方案

  • 比起React,更合适于创建小型企业级应用

  • 由Google负责维护基础包

React.js 由Facebook开发,2013年发布了第一个BSD license的开源版本

  • 很容易扩展

  • 状态可预测(更小的规模)

  • 很适合大型的前端项目

  • 相对较小的API

  • 持续重复渲染的组件为日益增加的复杂性提供了有效的支撑

Ember.js 是一个JavaScript框架,由Yehuada katz开发,2011年发布

  • 很活跃的社区

  • 持续开发特性

  • 很简单,很易于学习

  • 稳定的性能

  • 具有自主配置能力

  • 两种数据绑定方式

  • 加载和运行都很快

Aurelia.js 由Rob Eisenberg 开发,2015年1月发布

  • 整洁的文档

  • 结构合理(组成Aurelia.js模块既可以用于构建完整的框架也可单独使用)

  • 具有两种能够和用户界面自动同步模块的数据绑定方式

  • 高度易测的代码

  • 各种各样额外的工具可用

  • 可以得到开发者的商业支持

Meteor.js 由Meteor团队发开,2012年发布

  • 很快速

  • 很适合小型响应式应用

  • 是一个全栈框架

  • 能够在浏览器上根据数据的刷新进行实时渲染

  • 能够与Apache Coredova集成

  • 能得到很好的支持

Polymer.js 由Google开发,2013年发布

  • 很快速

  • 可以创建自定义元素

  • 提供了模板和双向数据绑定

  • 减小了开发者和设计者之间的跨度

  • 很适合特性丰富的应用

Vue.js 由Evav you开发,2014年发布

  • 具有非常简单的API

  • 可选择性添加的模块

  • 易于被开发者接纳

  • 易于与其它库和工程集成

  • 可以通过两种数据绑定方式更新模型和视图

  • 适合于大型的应用


【图解】哪家强?9种主流编程语言大比拼

9大主流编程语言包括Python、Java、C、C++、JavaScript、C#、Ruby、PHP以及Objective-C,文章展示了这9种语言打造的顶级应用成果,相关职位的平均薪酬(美国)以及该语言的优势与弊端。

编程语言之间的对比,一直都是众说纷纭,究竟哪种语言最好,我想没有一个标准答案,对于不同的人和不同的需求来说,对好的定义就不尽相同,但是我们却可以量化具体的指标,在9种主流编程语言之间给人们提供一个对比的参考,图片展示如下:

那么究竟应该选择哪种语言进行学习发展以及就业研究呢?其实,这是一个不必过于纠结的问题,对于目前的主流编程语言来说,每一种语言都有不错的薪资报酬和较好的发展平台和前景。

点击查看更多语言资讯


Aspose.Words 8月新版V17.8发布 | 附下载

Aspose.Words for .NET 17.8 更新

.NET版本8月更新重点:

  • 对PDF渲染引擎进行了显著优化。

  • 压缩PDF 1.5输出中的文档结构数据和交叉参考表,具有逻辑结构的输出PDF文档大幅变小。

  • 固定HTML文档中的图像标签现在可以包含一个替代的文本字符串。

  • “标记注释完成”选项的API。

  • 在Word文档中签署签名行。

  • 添加功能设置/获取“指定行和字符网格”。

  • 检测评论和回复评论。

  • 添加功能来格式化图表的数据标签。

Aspose.Words for Java 17.7 更新

java版本8月更新重点:

  • 渲染为PCL格式(打印机命令语言)已被实现。

  • 对PDF渲染引擎进行了显著的优化。

  • 性能和堆空间优化。

  • 压缩PDF 1.5输出中的文档结构数据和交叉参考,具有逻辑结构的输出PDF文档要小得多。

  • 固定HTML文档中的图像标签现在可以包含一个替代的文本字符串。

  • “标记注释完成”选项的API。

  • 在Word文档中签署签名行。

  • 添加功能设置/获取“指定行和字符网格”。

  • 检测评论和回复评论。

  • 添加功能来格式化图表的数据标签。


PPT控件 Spire.Presentation for .NET V2.8.35发布

.NET PPT控件Spire.Presentation 更新至2.8.35,支持设置演示幻灯片布局。

Spire.Presentation 2.8.35 更新
  • 支持获取或设置演示幻灯片的布局

新增
  • 支持获取或设置演示幻灯片的布局。

  • 支持从主机添加具有特定布局的新幻灯片。

  • 支持设置表的宽度/高度。

修复
  • 修复将演示幻灯片转换为图像时导致错误格式的问题。

  • 修复将演示幻灯片转换为图像时导致阴影丢失的问题。

  • 修复加载PowerPoint文件时导致异常“输入字符串的格式不正确”的问题。

  • 修复了形状背景从透明度变为白色的问题。

点击下载Spire.Presentation 2.8.35



6 招教你提高网站速度

打开网站的时候,我们经常会遇到速度慢的情况,如果你也跟我一样受够了那种愤怒和无奈的等待,那就来get今天文章的技巧吧,今天给大家介绍6个提高网站速度的方法,简单实用,你值得拥有。

① 图片优化

统计数据显示,用户倾向于放弃一个在3秒内未加载完成的网页。由于加载图片占据了网页上可下载的大部分字节空间,所以影响网页下载时间的关键来自于图像优化。确保正确的图像优化的最佳方法之一是采用正确的大小和格式(JPEG、GIF或PNG)。我们的目标是在不影响图片质量的情况下尽可能地缩减文件大小。

② 尝试CDN加速

内容交付网络的价值在于它可以获取一个网站的静态文件,如CSS、图像和JavaScript,并通过更接近用户物理位置的Web服务器传递它们。更短的接近等于更快的加载时间。像AWSCloudFront或者CloudFlare都是很好的CDN加速。CDN另外的好处是,即使停止加载带宽,你依然可以降低在下载高峰时期的中断风险。从各个方面看来,CDN都能带来双赢的局面。

③ 缓存

缓存是Web页面临时存储的一种机制,可以减少带宽并提高性能。当访问者到达您的站点时,缓存模式即启动。这样可以节省服务器时间,提高效率。启用浏览器缓存会让重复访问的访问者更快速的访问站点。

④ 压缩

Gzip是一个用于文件压缩软件的应用,就像是把你的网站变成一个zip文件。大多数服务器和客户支持Gzip。当一个Gzip兼容浏览器请求服务器将响应发送给浏览器资源,可以显著减少网站的时间延迟。

⑤ 简洁的代码

让你的代码更简洁是非常有必要的。这意味着打包压缩你的HTML、JavaScipt和CSS文件到更小的文件中来运行。例如,如果您的移动网站有五个JavaScript文件,浏览器将发出五个单独的HTTP请求来获取它们。为减少堵塞和等待时间,另一种方法是缩小和连接这5个文件到一起。

⑥ 检查你的Web主机

减少网站页面加载时间的另一个简单方法是检查你的主机提供商,看看你有什么样的软件包。共享托管帐户经常涉及与其他数十家公司共享服务器空间,这些网站的速度受到使用服务器的人数的影响。如果是这样的话,那么可能是时候考虑一个专用的访问服务器计划了。

网站页面加载时间每延长1秒,就会减少11%的页面浏览量,降低16%的客户满意度,降低7%的转化率。亚马逊也通过调查证实,网页打开的速度每提高100毫秒,能为网站增多1%的收益。类似的证实还有很多,网页打开的速度直接关系到网站的收益,已毋庸置疑,所以,无论从自身的体验还是经济效益方面来说,优化提高网页加载速度都是十分重要的。

推荐阅读


iWebOffice2009全文批注 V10.8发布 | 附下载

iWebOffice2009全文批注 10.8 更新

  • 全面支持各种OFFICE版本(OFFICE2000/2003/2007/2010/2013/2016)

  • WPS版本(WPS2007/2009/2012/2013/2016专业版)

  • IE环境(IE5/6/7/8/9/10/11)

  • WINDOWS系统(2000/XP/VISTA/7/8 PRO/8.1 PRO/10)

新增
  • 新增:IsCreateLogFile属性是否生成日志文件。

  • 新增:XX定制版本CLASSID、PROID版本。

  • 新增:支持在XXXX使用的加密系统中能在系统中能正常打开和保存文档。

修复
  • 在某些环境下模版套红之后不能保存的问题。

  • 新建WPS文档保存之后再打开启动的是Word编辑器的问题。

  • 解决关闭word后不能粘贴的问题。

  • 解决打开签名印章窗口默认不是盖章tab页的问题。

点击下载 iWebOffice2009全文批注 10.8



【更新】浏览器控件JxBrowser V6.14.2发布 | 修复多个重大bug

JxBrowser 6.14.2 更新

  • 增强了许多请求的新方法:JSObject.toJSONString(),它允许以JSON格式获取包含JavaScript对象的文本表示形式的字符串。

改进
  • 传递给JavaFX BrowserView滚动事件处理程序的javafx.scene.input.ScrollEvent对象现在包含附加信息,如deltaX,deltaY,shiftDown,ctrlDown,altDown,metaDown。

  • 传递给Swing BrowserView鼠标事件处理程序的java.awt.event.MouseWheelEvent对象现在包含附加信息,如deltaY,shiftDown,ctrlDown,altDown,metaDown。

  • 当将网页保存到PDF时,默认的Swing和JavaFX文件打开/保存对话框实现已经通过* .pdf扩展文件过滤器进行了扩展。

修复
  • 修复了在Linux平台上提取二进制文件时出现java.io.IOException错误的问题。

  • 修复了HTML5应用程序缓存在没有互联网连接的情况下不起作用的问题。

  • 修复了当尝试在重量级渲染模式中拖动某些东西时,线程死锁将阻止JavaFX和Swing BrowserView实现中的UI线程的问题。

点击下载JxBrowser 6.14.2



浏览器控件JxBrowser Swing开发者快速入门指南

在本快速入门指南中,我将给大家介绍如何下载JxBrowser库,获取评估许可证,创建并运行第一个Java Swing应用程序,演示如何从字符串加载和显示HTML内容。

开发工具:JxBrowser

设备要求:JDK 1.6及以上

1.下载JxBrowser库

要下载JxBrowser库导航到http://www.teamdev.com/jxbrowser,然后单击下载按钮。 将下载的归档解压缩到某个目录(例如D:\项目\ MyProject的\),当解压缩存档时,它将给出D:\ Projects \ MyProject \中的目录结构,如下所示:

lib\     jxbrowser.jar          // JxBrowser library     jxbrowser-win.jar      // Chromium binaries for Windows     jxbrowser-mac.jar      // Chromium binaries for Mac OS X     jxbrowser-linux32.jar  // Chromium binaries for Linux 32-bit     jxbrowser-linux64.jar  // Chromium binaries for Linux 64-bit samples\                   // API samples doc\javadoc\               // Public API Javadocs doc\guide\                 // Programmer's and Quick Start Guide demo\                      // Demo application Readme.txt                 // Readme file License agreement.txt      // License agreement

2.获取许可证

要获得免费的JxBrowser 30天评估许可,需要填写网络表单,然后单击下载评估键按钮,随后将收到一封电子邮件,其中包含可用于下载评估许可证文件(license.jar)的链接。下载license.jar文件并将其保存在D:\ Projects \ MyProject \ lib \目录中。

lib\     jxbrowser.jar          // JxBrowser library     jxbrowser-win.jar      // Chromium binaries for Windows     jxbrowser-mac.jar      // Chromium binaries for Mac OS X     jxbrowser-linux32.jar  // Chromium binaries for Linux 32-bit     jxbrowser-linux64.jar  // Chromium binaries for Linux 64-bit     license.jar            // Free 30-day evaluation license

3.创建Java项目

使用任何一个喜欢的IDE创建一个新的Java项目。

4.添加库

在之前的IDE中,在项目中添加JxBrowser库和评估许可证:

D:\Projects\MyProject\lib\jxbrowser.jar D:\Projects\MyProject\lib\jxbrowser-win.jar D:\Projects\MyProject\lib\jxbrowser-mac.jar D:\Projects\MyProject\lib\jxbrowser-linux32.jar D:\Projects\MyProject\lib\jxbrowser-linux64.jar D:\Projects\MyProject\lib\license.jar

5.创建Hello World示例

在Java项目中,创建一个新的HelloWorld Java类,其中包含以下内容。

/*  * Copyright (c) 2000-2017 TeamDev Ltd. All rights reserved.  * TeamDev PROPRIETARY and CONFIDENTIAL.  * Use is subject to license terms.  */ import com.teamdev.jxbrowser.chromium.Browser; import com.teamdev.jxbrowser.chromium.swing.BrowserView; import javax.swing.*; import java.awt.*; /**  * The sample demonstrates how to create Browser instance, embed it,  * load HTML content from string, and display it.  */ public class HelloWorld {     public static void main(String[] args) {         Browser browser = new Browser();         BrowserView view = new BrowserView(browser);         JFrame frame = new JFrame("JxBrowser - Hello World");         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);         frame.add(view, BorderLayout.CENTER);         frame.setSize(500, 400);         frame.setLocationRelativeTo(null);         frame.setVisible(true);         browser.loadHTML("<html><body><h1>Hello World!</h1></body></html>");     } } 

6.运行程序

编译并运行Hello World程序。 您将看到以下窗口:

慧都控件网