`
MMSCAU
  • 浏览: 114498 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jive 2.5 利用JDK中MessageDigest实现MD5

阅读更多

 

源码:

 

       import java.security.*;
  
       public static MessageDigest digest;
	public synchronized static final String hash(String data) {
        if (digest == null) {  
            try {
                //MD5算法,MD5 16位 SHA 20位
                digest = MessageDigest.getInstance("MD5"); 
                        
              }
            catch (NoSuchAlgorithmException nsae) {
                System.err.println("Failed to load the MD5 MessageDigest. " +
                "Jive will be unable to function normally.");
                nsae.printStackTrace();
            }
        }
        // Now, compute hash. 
        digest.update(data.getBytes()); 
        //填充
        return encodeHex(digest.digest()); 
              
    }

    /**
     * Turns an array of bytes into a String representing each byte as an
     * unsigned hex number.
     * <p>
     * Method by Santeri Paavolainen, Helsinki Finland 1996<br>
     * (c) Santeri Paavolainen, Helsinki Finland 1996<br>
     * Distributed under LGPL.
     *
     * @param bytes an array of bytes to convert to a hex-string
     * @return generated hex string
     */
    public static final String encodeHex(byte[] bytes) {   
        StringBuffer buf = new StringBuffer(bytes.length * 2); 
        int i;

        for (i = 0; i < bytes.length; i++) { 
  //【1】


             if (((int) bytes[i] & 0xff) < 0x10) { 
                //如果bytes[i]补码的低8位小于 16 buf添加0
                buf.append("0");
            }
            //bytes[i] 的低8位,换算成16进制数,添加到buf
            buf.append(Long.toString((int) bytes[i] & 0xff, 16));
        }
        return buf.toString();
    }

    /**
     * Turns a hex encoded string into a byte array. It is specifically meant
     * to "reverse" the toHex(byte[]) method.
     *
     * @param hex a hex encoded String to transform into a byte array.
     * @return a byte array representing the hex String[
     */
    public static final byte[] decodeHex(String hex) {
        char [] chars = hex.toCharArray();
        byte[] bytes = new byte[chars.length/2];
        int byteCount = 0;
        for (int i=0; i<chars.length; i+=2) {
            byte newByte = 0x00;
            newByte |= hexCharToByte(chars[i]); 
            newByte <<= 4;
            newByte |= hexCharToByte(chars[i+1]);
            bytes[byteCount] = newByte;
            byteCount++;
        }
        return bytes;
    }

    /**
     * Returns the the byte value of a hexadecmical char (0-f). It's assumed
     * that the hexidecimal chars are lower case as appropriate.
     *
     * @param ch a hexedicmal character (0-f)
     * @return the byte value of the character (0x00-0x0F)
     */
    private static final byte hexCharToByte(char ch) {
        switch(ch) {
            case '0': return 0x00;
            case '1': return 0x01;
            case '2': return 0x02;
            case '3': return 0x03;
            case '4': return 0x04;
            case '5': return 0x05;
            case '6': return 0x06;
            case '7': return 0x07;
            case '8': return 0x08;
            case '9': return 0x09;
            case 'a': return 0x0A;
            case 'b': return 0x0B;
            case 'c': return 0x0C;
            case 'd': return 0x0D;
            case 'e': return 0x0E;
            case 'f': return 0x0F;
        }
        return 0x00;
    }
 

 

添加测试方法: 看看对字母'h'的散列函数情况

 public static void main(String[] args)
    {
    	System.out.println(MD5.hash("h"));
    }

 同时在【1】处 添加 作为输出分析用

System.out.println("输出bytes["+i+"]"+bytes[i]);

 

结果:

输出bytes[0]-44
输出bytes[1]29
输出bytes[2]-116
输出bytes[3]-39
输出bytes[4]-113
输出bytes[5]0
输出bytes[6]-78
输出bytes[7]4
输出bytes[8]-23
输出bytes[9]-128
输出bytes[10]9
输出bytes[11]-104
输出bytes[12]-20
输出bytes[13]-8
输出bytes[14]66
输出bytes[15]126
d41d8cd98f00b204e9800998ecf8427e

 分析:如: -44补码 低8位 为11010100 =16*13+4=d4 ...

 decodeHex(String hex)就比较容易了

 

分享到:
评论

相关推荐

    jive 2.5 源代码

    《深入剖析Jive 2.5源代码:安装与研究指南》 Jive是一款功能强大的社交网络软件,它为企业提供了一个全面的协作平台,让用户能够进行沟通、分享知识和协同工作。在这里,我们重点关注的是Jive 2.5版本的源代码。源...

    jive-jdon-2.5 论坛源码及研究

    本Jive(Jdon版)可在Jbuilder 7直接打开。 建议你用Jbuilder7打开后,编辑相应设置(JDK1.4) 本软件在linux+jdk1.4+tomcat 4以上环境运行正常,中文显示正常。 Jive是学习java设计模式的最好教材 Jive论坛的优点 ...

    Jive的安装指导。

    ### Jive(Jdon)安装详细指导 ...希望本教程能帮助读者顺利完成Jive的安装配置,并能够充分利用其功能来提升团队协作效率或改善客户服务体验。如果在安装过程中遇到任何问题,建议参考官方文档或寻求社区支持。

    jive-jdon-2.5

    Jive是一个开放源码的Java论坛软件,它允许在网站上进行线程化的讨论。它提供了性能优秀的用户定义的JSP文件(用Jive的外壳)来完全改变论坛的外观、形象和功能。并提供了一个可植入的API,这些API提供诸如及时翻译、...

    最早最经典的Jive论坛开源 源码

    论坛的核心功能,如发帖、回帖、搜索和通知,都在Jive的源码中得到了实现。这些功能的实现涉及了多线程、缓存策略以及算法设计等多个方面。例如,为了提高搜索效率,Jive可能采用了全文索引技术,如Lucene,来快速...

    Jive java版源码

    通过阅读源码,我们可以了解单元测试、集成测试的实现,以及如何利用工具如JUnit、Mockito等进行自动化测试。此外,Jive可能采用了Jenkins或GitLab CI/CD等工具,实现代码的持续集成和部署,确保每次代码提交都能...

    Jive框架源码实现

    通过分析这个测试用例,你可以了解如何在实际项目中应用Jive框架,包括如何定义组件、如何编写事件处理器,以及如何利用AOP特性来增强代码的功能。 此外,Jive框架还强调了轻量级和高性能。它的设计目标是尽可能...

    java学习必学系统--jive

    5. **安全性与权限管理**:在企业环境中,安全性和权限控制至关重要。理解Jive的用户认证、授权机制,以及如何设置和管理用户角色,是确保系统安全的基础。 6. **性能优化与部署**:在实际生产环境中,了解如何优化...

    Jive源代码.zip

    同时,Jive还可能利用负载均衡和分布式计算技术,如Hadoop或Spark,来处理大规模数据和高并发场景。 最后,Jive源代码的版本控制使用Git,这不仅便于代码的版本管理和团队协作,还使得开发者可以方便地查看历史变更...

    jive.chm

    4 关于Jive1中的验证和相关类的调用 &lt;br&gt; 5 MD5的加密算法(JavaScript) &lt;br&gt; 产品介绍 1 Jive简介 &lt;br&gt; Jive Forums 1 Jive Forums特性 2 Jive Forums Changelog &lt;br&gt; ...

    jive论坛源码,jive项目源码,jive源码

    jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,...

    Jive eclipse Jive eclipse

    《Jive Eclipse:深入探索企业协作与开发工具》 Jive Eclipse是一款专为开发者设计的集成开发环境(IDE),它将Jive的...掌握并充分利用Jive Eclipse,无疑能帮助开发者和团队在快速迭代的软件开发世界中保持领先。

    jive安装实例jive安装实例jive安装实例

    2. 将 Jive 中 `application` 文件夹下的所有文件复制到这个新创建的 `jive.war` 目录中。 **第四步:配置 Jive 初始化属性** 编辑 `WEB-INF/classes/jive_init.properties` 文件,将 `jiveHome` 的值更改为 Jive ...

    Jive--SourceFile

    在本文中,我们将深入探讨Jive的源码,以及如何利用这些源码进行学习和开发。 首先,让我们关注一下Jive的核心组件: 1. **skins**: 这个目录包含Jive的界面皮肤和样式。了解这部分源码可以帮助我们理解如何自定义...

    Jive开放源码.rar

    版本号2.5表明这可能是Jive发展中的一个重要里程碑,通常包含了稳定的功能和改进。源码中可能包括了Jive的核心服务、用户界面、数据存储、安全机制以及社交网络的各种组件,例如论坛、博客、文档共享等。 1. **核心...

    Jive(Jdon版)源代码

    本软件在linux+jdk1.5+tomcat 5以上环境运行正常,中文显示正常。 安装步骤: 1.数据库安装,database目录中选择对应数据库如jive_mysql.sql 在你数据库服务器上建立数据库名Jive 导入jive_mysql.sql 2.Tomcat...

    Jive论坛1.2.4版

    快速的缓存功能,将经常访问的帖子保存在内存中,实现快速访问, 可通过Web管理界面动态监测缓存大小,根据访问量动态调整缓存。 强大的可定制的过滤功能,可以编制Java程序过滤插件对实现超强功能过滤。 附件上传...

    最早最经典的jive论坛源代码

    4. **安全性**:Jive论坛的源码中包含了身份验证、授权、防止SQL注入和XSS攻击的实现,这些都是Web开发中必不可少的安全措施。通过源码分析,可以了解到如何在Java Web应用中实现用户认证和授权。 5. **社区功能...

    Jive论坛原代码.rar

    在帖子互动中,Jive论坛可能利用了迭代器模式遍历和显示帖子,以及装饰器模式动态添加或修改帖子的功能。此外,适配器模式可能用于兼容不同类型的外部数据源,如导入导出数据。 在权限控制方面,Jive论坛可能采用...

Global site tag (gtag.js) - Google Analytics