源码:
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是一款功能强大的社交网络软件,它为企业提供了一个全面的协作平台,让用户能够进行沟通、分享知识和协同工作。在这里,我们重点关注的是Jive 2.5版本的源代码。源...
本Jive(Jdon版)可在Jbuilder 7直接打开。 建议你用Jbuilder7打开后,编辑相应设置(JDK1.4) 本软件在linux+jdk1.4+tomcat 4以上环境运行正常,中文显示正常。 Jive是学习java设计模式的最好教材 Jive论坛的优点 ...
### Jive(Jdon)安装详细指导 ...希望本教程能帮助读者顺利完成Jive的安装配置,并能够充分利用其功能来提升团队协作效率或改善客户服务体验。如果在安装过程中遇到任何问题,建议参考官方文档或寻求社区支持。
Jive是一个开放源码的Java论坛软件,它允许在网站上进行线程化的讨论。它提供了性能优秀的用户定义的JSP文件(用Jive的外壳)来完全改变论坛的外观、形象和功能。并提供了一个可植入的API,这些API提供诸如及时翻译、...
论坛的核心功能,如发帖、回帖、搜索和通知,都在Jive的源码中得到了实现。这些功能的实现涉及了多线程、缓存策略以及算法设计等多个方面。例如,为了提高搜索效率,Jive可能采用了全文索引技术,如Lucene,来快速...
通过阅读源码,我们可以了解单元测试、集成测试的实现,以及如何利用工具如JUnit、Mockito等进行自动化测试。此外,Jive可能采用了Jenkins或GitLab CI/CD等工具,实现代码的持续集成和部署,确保每次代码提交都能...
通过分析这个测试用例,你可以了解如何在实际项目中应用Jive框架,包括如何定义组件、如何编写事件处理器,以及如何利用AOP特性来增强代码的功能。 此外,Jive框架还强调了轻量级和高性能。它的设计目标是尽可能...
5. **安全性与权限管理**:在企业环境中,安全性和权限控制至关重要。理解Jive的用户认证、授权机制,以及如何设置和管理用户角色,是确保系统安全的基础。 6. **性能优化与部署**:在实际生产环境中,了解如何优化...
同时,Jive还可能利用负载均衡和分布式计算技术,如Hadoop或Spark,来处理大规模数据和高并发场景。 最后,Jive源代码的版本控制使用Git,这不仅便于代码的版本管理和团队协作,还使得开发者可以方便地查看历史变更...
4 关于Jive1中的验证和相关类的调用 <br> 5 MD5的加密算法(JavaScript) <br> 产品介绍 1 Jive简介 <br> Jive Forums 1 Jive Forums特性 2 Jive Forums Changelog <br> ...
jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,Jive是国外一个非常著名的BBS程序,完全开放源码.jive论坛源码,jive项目源码,jive源码,...
《Jive Eclipse:深入探索企业协作与开发工具》 Jive Eclipse是一款专为开发者设计的集成开发环境(IDE),它将Jive的...掌握并充分利用Jive Eclipse,无疑能帮助开发者和团队在快速迭代的软件开发世界中保持领先。
2. 将 Jive 中 `application` 文件夹下的所有文件复制到这个新创建的 `jive.war` 目录中。 **第四步:配置 Jive 初始化属性** 编辑 `WEB-INF/classes/jive_init.properties` 文件,将 `jiveHome` 的值更改为 Jive ...
在本文中,我们将深入探讨Jive的源码,以及如何利用这些源码进行学习和开发。 首先,让我们关注一下Jive的核心组件: 1. **skins**: 这个目录包含Jive的界面皮肤和样式。了解这部分源码可以帮助我们理解如何自定义...
版本号2.5表明这可能是Jive发展中的一个重要里程碑,通常包含了稳定的功能和改进。源码中可能包括了Jive的核心服务、用户界面、数据存储、安全机制以及社交网络的各种组件,例如论坛、博客、文档共享等。 1. **核心...
本软件在linux+jdk1.5+tomcat 5以上环境运行正常,中文显示正常。 安装步骤: 1.数据库安装,database目录中选择对应数据库如jive_mysql.sql 在你数据库服务器上建立数据库名Jive 导入jive_mysql.sql 2.Tomcat...
快速的缓存功能,将经常访问的帖子保存在内存中,实现快速访问, 可通过Web管理界面动态监测缓存大小,根据访问量动态调整缓存。 强大的可定制的过滤功能,可以编制Java程序过滤插件对实现超强功能过滤。 附件上传...
4. **安全性**:Jive论坛的源码中包含了身份验证、授权、防止SQL注入和XSS攻击的实现,这些都是Web开发中必不可少的安全措施。通过源码分析,可以了解到如何在Java Web应用中实现用户认证和授权。 5. **社区功能...
在帖子互动中,Jive论坛可能利用了迭代器模式遍历和显示帖子,以及装饰器模式动态添加或修改帖子的功能。此外,适配器模式可能用于兼容不同类型的外部数据源,如导入导出数据。 在权限控制方面,Jive论坛可能采用...