以下代码是客户写给我的,说是他们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# 啊。相关推荐

  1. java md5 签名_java md5签名

    签名算法 将所有请求参数(key,value 为一组),对数据结构按照 key 的升序,重新排序, 需要对 null 值进行过滤,需要将 boolean 型进行转换为 1 和 0 将排序后参数组合为新 ...

  2. java同步方法的特点_java多线程有哪些优点?同步实例代码展示

    在我们的日常学习当中会发现java的知识点是总是息息相关的,可以串联起来.java中多线程的有关内容可以衍生出更多知识,它的优缺点也是非常明显的.你都了解吗?一起来看看吧. 首先为大家介绍一下,多线程 ...

  3. java 打印预览_java打印和打印预览机制实例代码

    代码如下: import java.awt.basicstroke; import java.awt.borderlayout; import java.awt.color; import java. ...

  4. java正向最大匹配算法_java中文分词之正向最大匹配法实例代码

    前言 基于词典的正向最大匹配算法(最长词优先匹配),算法会根据词典文件自动调整最大长度,分词的好坏完全取决于词典. 所谓词典正向最大匹配就是将一段字符串进行分隔,其中分隔 的长度有限制,然后将分隔的子 ...

  5. java 正则表达式匹配冒号_java 获取冒号后面的参数(正则)实现代码

    我就废话不多说了,大家还是直接看代码吧~ String regEx=":[\S]+"; String sql=" select * from a where id=:id ...

  6. java程序员昵称_Java程序员需要掌握的几个代码命名

    原标题:Java程序员需要掌握的几个代码命名 代码中到处都需要命名.作为程序员,我们得给类命名,给变量命名,给函数命名,给参数命名,给命名空间命名,等等等等.下面有20条小贴士能帮助你提高你的命名能力 ...

  7. java表白程序玫瑰花_Java版给爱人表白的玫瑰花程序代码

    1 书写表白语句的frame(渐入功能) package com.wanju.blessing; import java.awt.color; import java.awt.container; i ...

  8. Java链表的书_JAVA实现双向链表的增删功能,完整代码package linked;class LinkedTable{ }public class Linke...

    JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...

  9. java微信红包开发_java写的伪微信红包功能示例代码

    性能优化点: 1.使用int不使用double.(单位用分不用元)也省去了还要用math.round四舍五入,把double类型数据只留小数点后前两位. 2.random() 方法用于返回一个随机数, ...

  10. java修改图章图片_Java处理PDF图章的方法示例(代码)

    本篇文章给大家带来的内容是关于Java 处理PDF图章的方法示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 图章(印章)是一种在合同.票据.公文等文件中表明法律效应.部门 ...

最新文章

  1. 游戏运维的最佳实践:搜狐畅游自动化运维之旅
  2. PHP数组函数总结与使用
  3. java 物理地址_java中的==与equals的区别是什么,什么是物理地址?
  4. JAVA——json序列化错误[hibernateLazyInitializer,handler,fieldHandler]解决方案
  5. 从原理上理解MySQL的优化建议
  6. linux 移动硬盘 优化,不花一分钱,给移动硬盘加速
  7. sql 183. 从不订购的客户
  8. DockPanel的使用
  9. 武汉男人一个月要赚多少钱,老婆才不用上班?心碎成渣……
  10. java对接paypal支付应用实例 (v2)
  11. 前端高效开发必备的 js 库
  12. 以洪荒之力打开linux德·摩根定律
  13. Linux用户态进程监控内存写排查踩内存
  14. 手动绘制logistic回归预测模型校准曲线(Calibration curve)(1)
  15. word选中段尾不选回车符
  16. BT TWS 听音乐无声问题
  17. 关于linux中DBG调试宏的使用总结,减少代码冗余
  18. java计算机毕业设计汽车维修服务系统源代码+数据库+系统+lw文档
  19. DevEco Studio中文、鸿蒙IDE汉化
  20. c语言 tan atan的使用说明

热门文章

  1. oracle9i阻塞,Oracle 9i 整体性能优化概述(zt)
  2. mysql awk_awk 实用实例参考
  3. python中的匿名函数_Python匿名函数详解
  4. 大学生python心得1000字_大学生读书心得1000字3篇
  5. 不能将紧实的字段 绑定到_紫光芯城市政配套建设项目样板段预计下月完成
  6. 计算机学术会议英语作文,计算机专业资料——重要国际学术会议
  7. 计算机网络管理的应用,计算机网络管理技术及应用
  8. mysql查询更新删除_mysql查询,更新(text类型),删除关联操作
  9. linux su - 用户名,在Linux中,su命令 (切换用户)
  10. java 文件夹不存在则创建_java判断文件不存在就创建的方法