Java安全学习笔记(八)-使用加盐技术防范字典式攻击
来源:互联网 发布:出租车计费软件 编辑:程序博客网 时间:2024/06/13 08:54
口令被轻松攻击的主要原因在于口令过短或者过于简单。如果口令很长,则计算所有组合的消息摘要可能要成百上千年,这将大大加大了生成字典的难度。同时口令过长也会给用户带来不便记忆的麻烦,因此用户使用的口令长度总是有限的。本实例将介绍如何使用加盐技术在有限的口令长度上防止字典式攻击。
使用加盐技术防范字典式攻击的技术要点如下:
账号口令初始化;
生成随机数(盐)
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值以数字保存在文件中,各个数字之间以空格隔开。
阅读全文
0 0
- Java安全学习笔记(八)-使用加盐技术防范字典式攻击
- DDoS拒绝服务攻击和安全防范技术
- DDoS拒绝服务攻击和安全防范技术
- 安全札记之SYN 攻击原理及防范技术
- Web安全,常见攻击防范
- 交换机安全防范技术
- 交换机安全防范技术
- 交换机安全防范技术
- Java 防范XSS攻击
- OWASP WebGoat---安全测试学习笔记(八)---跨站脚本攻击
- 利用salt防范MD5字典攻击
- 带你揭秘“黑客终极武器”DDoS拒绝服务攻击和安全防范技术
- 二层安全威胁攻击防范
- IIS服务器防范攻击安全设置技巧
- JavaScript数据安全实战!攻击与防范
- web安全防范之XSS漏洞攻击
- HTTP攻击与防范--PHP安全配置
- web安全学习笔记之-注入攻击
- JRebel使用错误记录
- 渲染状态改变消耗详情
- 我的编码习惯
- java堆栈详解
- HTML---网页编程(2)
- Java安全学习笔记(八)-使用加盐技术防范字典式攻击
- HttpApplication实战大文件上传 (第四篇)
- 15.Redis高级复制
- 使用TreeMap实现ASCII排序
- 用Webmagic和MongoDB实现的通用化爬虫框架
- 【java】sql语句的冒号 :
- Base公共接口实现泛型的类型获取
- bzoj3572世界树 虚树+树型动规
- Xshell配置ssh免密码登录-密钥公钥(Public key)与私钥(Private Key)登录【已成功实例】