java c md5 疯_JAVA md5把我气到疯的代码,天哪,神呀,我的C# 啊。
以下代码是客户写给我的,说是他们JAVA的加密方法,其中红色的那两句差点把我整垮了。
Java人士说:content是明文 key是密钥,用密钥来加密明文。
C#认识说:什么明文密钥一起丢进去,所以只需要 content+key 丢到computehash(...)一切尽在转化中。。。。
private static String getDigest(String content, String key, String algorithm) {
try {
byte[] plainText = content.getBytes("utf-8");
MessageDigest messageDigest = MessageDigest.getInstance(algorithm);
messageDigest.update(plainText);
byte[] digest = messageDigest.digest(key.getBytes("utf-8"));
return byte2hex(digest);
} catch (NoSuchAlgorithmException ex) {
Debug.error("Error digest algorithm: " + algorithm);
} catch (UnsupportedEncodingException e) {
Debug.error("Error digest algorithm: " + algorithm);
}
return null;
}
private static String byte2hex(byte[] b) {
StringBuilder hs = new StringBuilder();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) {
hs.append("0" + stmp);
} else {
hs.append(stmp);
}
}
return hs.toString();
}
红色部分其实就是:
messageDigest.update(plainText);
messageDigest.update(key.getBytes("utf-8"));
byte[] digest = messageDigest.digest();
可恶的是本人就没有学过JAVA,看了三遍的JDK说明,无解,
最后才看到了
SHA-1 例子:
现在有i1、i2和i3,分别是3个字节数组,构成一个消息,计算其散列函数值:
MessageDigest sha1 = MessageDigest.getInstance(“sha-1”);
sha1.Update(i1);
sha1.Update(i2);
sha1.Update(i3);
byte[] hash = sha1.digest();
对digest方法的调用则说明输入消息结束。进行初始化,update提交的数据丢失。Digest方法也可以把输入的最后一部分作为参数:
看到这里我真的想哭。原来就是字符串的一个叠加,搞得我想死。我一直以为这两个函数功能是不一样的。鬼才晓得后面这个
digest(byte[]),其实和Update是一样的。
sha1.Update(i1);
sha1.Update(i2);
byte[] hash = sha1.digest(i3);
在一些散列函数实现中,可以通过复制(clone)来获得中间散列数值。如:
要分别计算:i1,i1和i2,i1、i2和i3的散列数值。
//计算i1 hash
sha1.update(i1);
byte[] i1Hash = sha1.clone().digest();
//计算i1和i2 hash
sha1.update(i2);
byte[] i12Hash = sha1.clone().digest();
//计算i1、i2和i3 hash
sha1.update(i3);
byte[] i123Hash = sha1.digest();
太感谢上苍了。
1 //方法1:2 3 //16位4 5 publicstaticstringGetMd5(stringstr)6 {7 System.Security.Cryptography.MD5CryptoServiceProvider md5=newMD5CryptoServiceProvider();8 stringa=BitConverter.ToString(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str)),4,8);9 a=a.Replace("-","");10 returna;11 }12 13 //32位 15 publicstaticstringGetMd51(stringstr)16 {17 System.Security.Cryptography.MD5CryptoServiceProvider md5=newMD5CryptoServiceProvider();18 stringa=BitConverter.ToString(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(str)));19 a=a.Replace("-","");20 returna;21 }22 23 //方法2:24 25 publicstaticstringHash(stringtoHash)26 {27 MD5CryptoServiceProvider crypto=newMD5CryptoServiceProvider();28 byte[] bytes=Encoding.UTF8.GetBytes(toHash);29 bytes=crypto.ComputeHash(bytes);30 StringBuilder sb=newStringBuilder();31 foreach(bytenuminbytes)32 {33 sb.AppendFormat("{0:x2}", num);34 }35 returnsb.ToString();//32位36 returnsb.ToString().Substring(8,16);//16位37 }
Java加密出来的是900cb2d97c87b750fd1adafbb322fa45
C#加密出来的是:900cb2d97c87b750fd1adafbb322fa45
写的很好。
java c md5 疯_JAVA md5把我气到疯的代码,天哪,神呀,我的C# 啊。相关推荐
- java md5 签名_java md5签名
签名算法 将所有请求参数(key,value 为一组),对数据结构按照 key 的升序,重新排序, 需要对 null 值进行过滤,需要将 boolean 型进行转换为 1 和 0 将排序后参数组合为新 ...
- java同步方法的特点_java多线程有哪些优点?同步实例代码展示
在我们的日常学习当中会发现java的知识点是总是息息相关的,可以串联起来.java中多线程的有关内容可以衍生出更多知识,它的优缺点也是非常明显的.你都了解吗?一起来看看吧. 首先为大家介绍一下,多线程 ...
- java 打印预览_java打印和打印预览机制实例代码
代码如下: import java.awt.basicstroke; import java.awt.borderlayout; import java.awt.color; import java. ...
- java正向最大匹配算法_java中文分词之正向最大匹配法实例代码
前言 基于词典的正向最大匹配算法(最长词优先匹配),算法会根据词典文件自动调整最大长度,分词的好坏完全取决于词典. 所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子 ...
- java 正则表达式匹配冒号_java 获取冒号后面的参数(正则)实现代码
我就废话不多说了,大家还是直接看代码吧~ String regEx=":[\S]+"; String sql=" select * from a where id=:id ...
- java程序员昵称_Java程序员需要掌握的几个代码命名
原标题:Java程序员需要掌握的几个代码命名 代码中到处都需要命名.作为程序员,我们得给类命名,给变量命名,给函数命名,给参数命名,给命名空间命名,等等等等.下面有20条小贴士能帮助你提高你的命名能力 ...
- java表白程序玫瑰花_Java版给爱人表白的玫瑰花程序代码
1 书写表白语句的frame(渐入功能) package com.wanju.blessing; import java.awt.color; import java.awt.container; i ...
- Java链表的书_JAVA实现双向链表的增删功能,完整代码package linked;class LinkedTable{ }public class Linke...
JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...
- java微信红包开发_java写的伪微信红包功能示例代码
性能优化点: 1.使用int不使用double.(单位用分不用元)也省去了还要用math.round四舍五入,把double类型数据只留小数点后前两位. 2.random() 方法用于返回一个随机数, ...
- java修改图章图片_Java处理PDF图章的方法示例(代码)
本篇文章给大家带来的内容是关于Java 处理PDF图章的方法示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门 ...
最新文章
- 游戏运维的最佳实践:搜狐畅游自动化运维之旅
- PHP数组函数总结与使用
- java 物理地址_java中的==与equals的区别是什么,什么是物理地址?
- JAVA——json序列化错误[hibernateLazyInitializer,handler,fieldHandler]解决方案
- 从原理上理解MySQL的优化建议
- linux 移动硬盘 优化,不花一分钱,给移动硬盘加速
- sql 183. 从不订购的客户
- DockPanel的使用
- 武汉男人一个月要赚多少钱,老婆才不用上班?心碎成渣……
- java对接paypal支付应用实例 (v2)
- 前端高效开发必备的 js 库
- 以洪荒之力打开linux德·摩根定律
- Linux用户态进程监控内存写排查踩内存
- 手动绘制logistic回归预测模型校准曲线(Calibration curve)(1)
- word选中段尾不选回车符
- BT TWS 听音乐无声问题
- 关于linux中DBG调试宏的使用总结,减少代码冗余
- java计算机毕业设计汽车维修服务系统源代码+数据库+系统+lw文档
- DevEco Studio中文、鸿蒙IDE汉化
- c语言 tan atan的使用说明
热门文章
- oracle9i阻塞,Oracle 9i 整体性能优化概述(zt)
- mysql awk_awk 实用实例参考
- python中的匿名函数_Python匿名函数详解
- 大学生python心得1000字_大学生读书心得1000字3篇
- 不能将紧实的字段 绑定到_紫光芯城市政配套建设项目样板段预计下月完成
- 计算机学术会议英语作文,计算机专业资料——重要国际学术会议
- 计算机网络管理的应用,计算机网络管理技术及应用
- mysql查询更新删除_mysql查询,更新(text类型),删除关联操作
- linux su - 用户名,在Linux中,su命令 (切换用户)
- java 文件夹不存在则创建_java判断文件不存在就创建的方法