2022年java-MD开发教程 .pdf

上传人:C****o 文档编号:40149289 上传时间:2022-09-08 格式:PDF 页数:4 大小:45.07KB
返回 下载 相关 举报
2022年java-MD开发教程 .pdf_第1页
第1页 / 共4页
2022年java-MD开发教程 .pdf_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《2022年java-MD开发教程 .pdf》由会员分享,可在线阅读,更多相关《2022年java-MD开发教程 .pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、javabean:MD5 的Java Bean 实现疯狂代码 http:/ MD5 介绍 MD5 全称是 Message-Digest Algorithm 5在90年代初由 MIT计算机科学实验室和 RSA Data SecurityInc 发明经 MD2、MD3 和MD4 发展而来 Message-Digest 泛指字节串(Message)Hash变换就是把个任意长度字节串变换成定长大整数请注意我使用了“字节串”而不是“串”这个词是这种变换只和字节值有关和集或编码方式无关 MD5 将任意长度“字节串”变换成个128bit 大整数并且它是个不可逆串变换算法换句话说就是即使你看到源和算法描述也无

2、法将个MD5 值变换回原始串从数学原理上说是原始串有无穷多个这有点象不存在反数学 MD5 典型应用是对段 Message(字节串)产生fingerpr(指纹)以防止被“篡改”举个例子你将段话写在个叫readme.txt 文件中并对这个 readme.txt 产生个 MD5 值并记录在案然后你可以传播这个文件给别人别人如果修改了文件中任何内容你对这个文件重新计算MD5 时就会发现如果再有个第 3 方认证机构用 MD5 还可以防止文件作者“抵赖”这就是所谓数字签名应用 MD5 还广泛用于加密和解密技术上在很多操作系统中用户密码是以MD5 值(或类似其它算法)方式保存 用户Login 时候系统是把用

3、户输入密码计算成MD5 值然后再去和系统中保存MD5 值进行比较而系统并不“知道”用户密码是什么 些黑客破获这种密码思路方法是种被称为“跑字典”思路方法有两种思路方法得到字典种是日常搜集用做密码串表另种是用排列组合思路方法生成先用MD5 计算出这些字典项 MD5 值然后再用目标 MD5 值在这个字典中检索 即使假设密码最大长度为8同时密码只能是字母和数字共26+26+10=62 个排列组合出字典项数则是P(62,1)+P(62,2).+P(62,8)那也已经是个很天文数字了存储这个字典就需要TB 级磁盘组而且这种思路方法还有个前提就是能获得目标账户密码MD5 值情况下才可以 在很多电子商务和社

4、区应用中管理用户Account是种最常用基本功能尽管很多Application Server提供了这些基本组件但很多应用开发者为了管理更大灵活性还是喜欢采用关系数据库来管理用户懒惰做法是用户密码往往使用明文或简单变换后直接保存在数据库中因此这些用户密码对软件Software 开发者或系统管理员来说可以说毫无保密可言本文目是介绍MD5Java Bean 实现同时给出用 MD5 来处理用户 Account密码例子这种思路方法使得管理员和设计者都无法看到用户密码尽管他们可以化它们但重要点是对于用户密码设置习惯保护 有兴趣读者可以从这里取得MD5 也就是 RFC 1321 文本http:/www.ie

5、tf.org/rfc/rfc1321.txt 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 4 页 -实现策略 MD5 算法在 RFC1321 中实际上已经提供了 C实现我们其实马上就能想到至少有两种用Java实现它思路方法第种是用 Java语言重新写整个算法或者再说简单点就是把C改写成 Java第 2 种是用 JNI(Java Native Interface)来实现核心算法仍然用这个C用Java类给它包个壳 但我个人认为 JNI应该是 Java为了解决某类问题时没有办法办法(比如和操作系统或 I/O 设备密切相关应用)同时为了提供和其它语言互操作性个手段使用JNI带来最大问

6、题是引入了平台依赖性打破了SUN 所鼓吹“次编写到处运行”Java好处因此我决定采取第种思路方法来和大家起尝试下“次编写到处运行”好处 2 来检验下Java 2 现在对于比较密集计算效率问题 实现过程 限于这篇文章篇幅同时也为了更多读者能够真正专注于问题本身我不想就某种Java集成开发环境来介绍这个Java Bean制作过程介绍个思路方法时我发现步骤和命令很清晰我相信有任何种Java集成环境 3 天以上经验读者都会知道如何把这些代码在集成环境中编译和运行用集成环境讲述问题往往需要配很多屏幕截图这也是我直对集成环境很头疼原因我使用了个普通文本编辑器同时使用了Sun公司标准 JDK 1.3.0 f

7、or Windows NT 其实把 C转换成 Java对于个有定 C语言基础员并不困难这两个语言基本语法几乎完全致我大概花了个小时时间完成了代码转换工作我主要作了下面几件事:把必须使用些#宏定义变成 Class中final 这样保证在个进程空间中多个Instance 共享这些数据 删去了些无用#我只关心 MD5 这个推荐 C实现同时实现了 MD2 MD3 和 MD4 而且有些#还和C区别编译器有关 将些计算宏转换成 final 成员 所有变量命名和原来C实现中保持致在大小写上作些符合Java习惯变化计算过程中 C变成了 private 思路方法(成员)关键变量位长调整 定义了类和思路方法 名师

8、资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 4 页 -需要注意是很多早期C编译器类型是 16 bitMD5 使用了 unsigned long 并认为它是 32bit 无符号整数而在Java中是32 bitlong是64 bit 在MD5C 实现中使用了大量位操作这里需要指出点是尽管Java提供了位操作由于Java没有unsigned 类型对于右移位操作多提供了个无符号右移:等价于 C中 对于unsigned 数处理 Java不提供无符号数运算两个大数相加就会溢出得到个负数或异常因此我将些关键变量在Java中改成了long 类型(64bit)我个人认为这比自己去重新定义组无符号数

9、类同时重载那些运算符要方便同时效率高很多并且代码也易读 OO(Object Oriented)滥用反而会导致效率低下 限于篇幅这里不再给出原始C代码有兴趣对照读者朋友可以去看RFC 1321MD5.java 源代码 测试 在 RFC 1321 中给出了 Test suite用来检验你实现是否正确:MD5()=d41d8cd98f00b204e9800998ecf8427e MD5(a)=0cc175b9c0f1b6a831c399e269772661 MD5(abc)=900150983cd24fb0d6963f7d28e17f72 MD5(message digest)=f96b697d7c

10、b7938d525a2f31aaf161d0 MD5(abcdefghijklmnopqrstuvwxyz)=c3fcd3d76192e4007dfb496cca67e13b 这些输出结果含义是指:空串”MD5 值是d41d8cd98f00b204e9800998ecf8427e串”a”MD5 值是0cc175b9c0f1b6a831c399e269772661 编译并运行我们:javac d.MD5.java java beartool.MD5为了将来不和别人同名冲突我在我第行使用了package beartool;因此编译命令 javac d.MD5.java 命令在我们工作目录下自动建立

11、了个beartool 目录目录下放着编译成功MD5.我们将得到和 Test suite同样结果当然还可以继续测试你感兴趣其它MD5 变换例如:java beartool.MD51234 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 4 页 -将给出 1234MD5 值 可能是我计算机知识是从Apple II和Z80单板机开始我对大写十 6 进制代码有偏好如果您想使用小写DigestString 只需要把 HEX 中A、B、C、D、E、F改成a、b、c、d、e、f 就可以了 MD5 据称是种比较耗时计算我们Java版MD5 闪就算出来了没遇到什么障碍而且用肉眼感觉不出来Java版

12、MD5 比C版慢 为了测试它兼容性我把这个MD5.文件拷贝到我另台 Linux+IBM JDK 1.3 机器上执行后得到同样结果确实是“次编写到处运行了”Java Bean简述 现在我们已经完成并简单测试了这个Java Class 我们文章标题是做个 Java Bean 其实普通 Java Bean很简单并不是什么全新或伟大概念就是个JavaClass尽管 Sun规定了些需要实现思路方法但并不是强制而 EJB(Enterprise Java Bean)无非规定了些必须实现(非常类似于响应事件)思路方法这些思路方法是供 EJB Container 使用()在个 Java Application或Applet 里使用这个 bean非常简单最简单思路方法是你要使用这个类源码工作目录下建个 beartool 目录把这个文件拷贝进去然后在你中import beartool.MD5就可以了最后打包成.jar 或.war 是保持这个相对目录关系就行了 2009-1-8 2:26:04 疯狂代码 http:/ 4 页,共 4 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁