JAVA MD5算法应用

简介:         在一些对安全需求比较高的WEB站点中,除了要保证数据的传输有保障之外,数据库的内容也需要做一些处理,像银行之类的系统,要防止外人取得数据,还不能让管理员看到账号和密码.

 

      在一些对安全需求比较高的WEB站点中,除了要保证数据的传输有保障之外,数据库的内容也需要做一些处理,像银行之类的系统,要防止外人取得数据,还不能让管理员看到账号和密码.很多时候都是利用MD5算法来保证数据的完整性和安全性,但是MD5算法并不是一个加密算法,它就像人的"指纹"一样,每个人都有指纹,而且指纹都不一样,MD5算法算出的结果,就像数据的指纹一样,任何数据,不论它占用多少空间,它的指纹都能作为这块数据的唯一标识.,SUN公司的JDK文档就描述了如何通过类java.security.MessageDigest 来完成JAVA的MD5算法实现.

     我们先来看一看它的继承关系:

     此类为抽象类,并且其父类也是抽象类, MessageDigestSpi 是一个Service Provider Interface (服务提供者接口),主要是为其子类提供方法摘要,并由其子类完成.

     由于 MessageDigest 是一个抽象类,我们不可以直接实例化它,得用它的静态方法就能得到这个对象的实例:

public static MessageDigest getInstance(String algorithm)
                                 throws NoSuchAlgorithmException
   它接受一个字符串参数,我们只需传递一个算法的名称即可,就像这样:
   MessageDigest md = MessageDigest.getInstance("md5");
   它返回实现了指定摘要算法的MessageDigest对象.
   接下来,我们只用把数据传递给MessageDigest对象的digest方法就行了:
   md.digest(data);
   public byte[] digest(byte[] input)
   这个方法接受一个byte[],返回这个经MD5算法算过的byte[].这个byte[]可以是任何字符,如果我把"1296105945865".getBytes()作为参数传递进去,
看看它的返回值:
   md.digest(rand.getBytes());
   //~[-53, -89, 11, -29, -127, 98, 90, 45, -119, -24, -80, -49, -38, 96, -35, 2]
这样的数据在HTTP协议中传输,会使浏览器疯掉,因为它也许根本不知道如何处理诸如:",e123,1;2,;,./;?=2h3jhkjl?;"这样的数据,一般都会把它转为以
16进制(32位)的方式,或者用BASE64转成"明文"再处理.
转成以16进制显示:
public String show(byte[] b){
    StringBuilder sb = new StringBuilder();
    for(int i = 0;i<b.length;i++){
        int high = (b[i] >> 4) & 0xF;    //取出高4位
        int low = b[i] & 0xF;            //取出低4位
        sb.append(String.format("%x%x", high,low));
    }
    System.out.println(sb);
    return sb.toString();        
}

在网上进行下载的时候,经常有网站在资源旁边附上md5验证码,就是让你在下载完成后,用md5算法把你下载的东西算一遍,把结果进行比较,如果一致,就表示你下载的资源确实和原版是一样的.假设某银行出示了相关网银驱动的md5码,你就可以在网上下载好驱动后,进行比较,稍有偏差,都可以认为此驱动被注入了木马之类的,因为相同的数据,会产生相同的"指纹".为什么很多人认为MD5算法是一个加密算法?因为很多人在数据库存用户密码的时候,不是存的密码,而是存的用MD5算法算过密码之后的数据.这样一来,就算有人知道某数据库里某用户的密码是什么,他也一样登录不进来,他在输入密码之后,输入的密码会进行MD5算法算过之后,再与数据库里存的密码数据进行比较.这样一来,安全性又提高了.

由于MD5算法算过的结果很多时候不太方便,除了以16进制显示之外,也可以用BASE64算法进行编码.BASE64就是通过其算法对数据处理后,处理得到的结果全部是以"明文"显示,所谓"明文",就是你能在键盘上看到的字符,而且像"."这样的特殊符号也没有,所以,用BASE64算法得到MD5算法结果的"明文"也可以.

     SUN公司也提供了一个类用来完成BASE64的算法:sun.misc.BASE64Encoder.由于官方并没有正式发布这个类,所以它的包名为misc,杂项的意思,在JDK1.6文档里面也找不到这个类的相关信息.但是使用起来很简单,很方便:

BASE64Encoder   encoder   =   new   BASE64Encoder ( ) ;
encoder.encode(Bytes[]);      //返回String

关于BASE64Encoder的encode()方法,重载了7个,还有encodeBuffer()方法,就不在这里述说了,用法是一样的.另外,数据传输过后,还需要解码,就要用到sun.misc.BASE64Decoder这个类来完成了:

BASE64Decoder   decoder   =   new   BASE64Decoder ( );
decoder.decodeBuffer(String);

依靠BASE64Decoder的decodeBuffer()方法,就能完成数据的解码.这个方法同样重载了几次,使用是一样的.

 

目录
相关文章
|
26天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
73 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
13天前
|
存储 算法 安全
探究‘公司禁用 U 盘’背后的哈希表算法与 Java 实现
在数字化办公时代,信息安全至关重要。许多公司采取“禁用U盘”策略,利用哈希表算法高效管理外接设备的接入权限。哈希表通过哈希函数将设备标识映射到数组索引,快速判断U盘是否授权。例如,公司预先将允许的U盘标识存入哈希表,新设备接入时迅速验证,未授权则禁止传输并报警。这有效防止恶意软件和数据泄露,保障企业信息安全。 代码示例展示了如何用Java实现简单的哈希表,模拟公司U盘管控场景。哈希表不仅用于设备管理,还在文件索引、用户权限等多方面助力信息安全防线的构建,为企业数字化进程保驾护航。
|
21天前
|
监控 算法 网络协议
Java 实现局域网电脑屏幕监控算法揭秘
在数字化办公环境中,局域网电脑屏幕监控至关重要。本文介绍用Java实现这一功能的算法,涵盖图像采集、数据传输和监控端显示三个关键环节。通过Java的AWT/Swing库和Robot类抓取屏幕图像,使用Socket进行TCP/IP通信传输图像数据,并利用ImageIO类在监控端展示图像。整个过程确保高效、实时和准确,为提升数字化管理提供了技术基础。
58 15
|
13天前
|
运维 监控 算法
企业局域网监控软件中 Java 优先队列算法的核心优势
企业局域网监控软件是数字化时代企业网络安全与高效运营的基石,犹如一位洞察秋毫的卫士。通过Java实现的优先队列算法,它能依据事件优先级排序,确保关键网络事件如异常流量、数据泄露等被优先处理,保障系统稳定与安全。代码示例展示了如何定义网络事件类并使用PriorityQueue处理高优先级事件,尤其在面对疑似风险时迅速启动应急措施。这一核心技术助力企业在复杂网络环境中稳健前行,护航业务腾飞。
56 32
|
4天前
|
存储 监控 算法
剖析基于Java算法驱动的智能局域网管控之道
本文探讨了基于Java语言的局域网控制方案,结合链表数据结构与令牌桶算法,解决设备管理和流量调度难题。通过链表灵活存储网络设备信息,实现高效设备管理;令牌桶算法则精准控制流量,确保网络平稳运行。二者相辅相成,为校园、企业等局域网提供稳固高效的控制体系,保障业务连续性和数据安全。
|
1天前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
24 6
|
1天前
|
算法 Java C++
【潜意识Java】蓝桥杯算法有关的动态规划求解背包问题
本文介绍了经典的0/1背包问题及其动态规划解法。
24 5
|
1天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
19 5
|
1天前
|
人工智能 自然语言处理 搜索推荐
【潜意识Java】了解并详细分析Java与AIGC的结合应用和使用方式
本文介绍了如何将Java与AIGC(人工智能生成内容)技术结合,实现智能文本生成。
19 5
|
1天前
|
Java 编译器 开发者
Java中的this关键字详解:深入理解与应用
本文深入解析了Java中`this`关键字的多种用法
26 9

热门文章

最新文章