Java安全学习笔记(八)-使用加盐技术防范字典式攻击
2017-08-29 10:55
106 查看
口令被轻松攻击的主要原因在于口令过短或者过于简单。如果口令很长,则计算所有组合的消息摘要可能要成百上千年,这将大大加大了生成字典的难度。同时口令过长也会给用户带来不便记忆的麻烦,因此用户使用的口令长度总是有限的。本实例将介绍如何使用加盐技术在有限的口令长度上防止字典式攻击。
使用加盐技术防范字典式攻击的技术要点如下:
账号口令初始化;
生成随机数(盐)
MessageDigest对象的应用;
在文件或数据库中保存账号和口令的消息摘要
第一次运行结果
第二次运行结果
源程序解读
(1)由上面的结果可以看出每次使用的盐都会有不一样的消息摘要,即使攻击者得到saft_password.txt,如果还想以前那样生成字典,攻击,只能攻击8个字符长度的口令,如果用户口令长度超过8个,则字典将无效.
(2)执行MessageDigest类的静态方法getInstance()生成MessageDigest对象。其中传入的参数指定计算消息摘要所使用的算法。
(3)创建字节数组by。使用Java中random类生成随机数(盐),执行Random类的nextBytes()方法,方法的参数为by,即可生成随机数并将随机数赋值给by
(4)执行MessageDigest类的digest()方法进行计算,然后将账号、盐和口令消息摘要保存在saft_password.txt文件中。对于盐,这里将数组中各个byte值以数字保存在文件中,各个数字之间以空格隔开。
使用加盐技术防范字典式攻击的技术要点如下:
账号口令初始化;
生成随机数(盐)
MessageDigest对象的应用;
在文件或数据库中保存账号和口令的消息摘要
package core; import java.io.FileOutputStream; import java.io.PrintWriter; import java.security.MessageDigest; import java.util.Random; /** * 使用加盐技术防范字典式攻击 * */ public class Validate_Salt { public static void main(String[] args) throws Exception { //读入账号口令 String user="msg"; String passwd="pa"; //生成盐 Random rand=new Random(); byte[] by=new byte[15]; rand.nextBytes(by); //计算消息摘要 MessageDigest md=MessageDigest.getInstance("MD5"); md.update(by); md.update(passwd.getBytes("UTF8")); byte b[]=md.digest(); //计算消息摘要 String result = ""; for (int i = 0; i < b.length; i++) { result += Integer.toHexString((0x000000ff&b[i]) | 0xffffff00).substring(6); } //保存账号、盐和消息摘要 PrintWriter out=new PrintWriter(new FileOutputStream("saft_password.txt")); out.println(user); for (int i = 0; i < by.length; i++) { out.print(by[i]+" "); } out.println(); out.println(result); out.close(); } }
第一次运行结果
第二次运行结果
源程序解读
(1)由上面的结果可以看出每次使用的盐都会有不一样的消息摘要,即使攻击者得到saft_password.txt,如果还想以前那样生成字典,攻击,只能攻击8个字符长度的口令,如果用户口令长度超过8个,则字典将无效.
(2)执行MessageDigest类的静态方法getInstance()生成MessageDigest对象。其中传入的参数指定计算消息摘要所使用的算法。
(3)创建字节数组by。使用Java中random类生成随机数(盐),执行Random类的nextBytes()方法,方法的参数为by,即可生成随机数并将随机数赋值给by
(4)执行MessageDigest类的digest()方法进行计算,然后将账号、盐和口令消息摘要保存在saft_password.txt文件中。对于盐,这里将数组中各个byte值以数字保存在文件中,各个数字之间以空格隔开。
相关文章推荐
- java安全框架-Shiro学习笔记(六)-url匹配方式+shiro标签使用+session会话机制
- Java安全学习笔记(六)-使用消息摘要验证口令
- Hibernate学习笔记---1.java对象持久化技术
- MSSQL数据库安全防范学习笔记
- 使用SNMP服务后的安全防范技术讲解
- JAVA核心技术学习笔记(第七版,Ⅱ高级特性之集合)
- JAVA 核心技术卷1学习笔记(1)
- Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(二)
- 2009-05-24技术学习:Java中使用Axis调用.Net WebService
- java SSL安全socket的通讯实例-java学习笔记(4)
- Java 技术是什么? 学习笔记
- NET 应用架构指导 V2 学习笔记(十五) 数据访问层指导 技术、性能、安全、部署、以及设计步骤考虑
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- Java学习笔记(1)有事没事得看看的Java技术图书(不断补充中)
- ITCAST视频-Spring学习笔记(使用JDK中的Proxy技术实现AOP功能)
- Java2核心技术第七版的学习笔记(二):.The Java Programming Environment(Java的环境)
- JAVA2核心技术卷1 学习笔记3 对象和类
- 学习java安全技术前的准备-Java基础-Java-编程开发
- Java2核心技术第七版的学习笔记(三) Fundamental Programming Structures in Java(Java语言的基础)(四):
- java学习笔记-lable的使用