`
binwu95042
  • 浏览: 3126 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java和.Net中的MD5加密不同之处及代码

阅读更多
第一次写博客,写的不好的地方请见谅,决定开始写博客主要是想记录下每天所学的东西,同时也希望有可能的话给像我一样的初学者的朋友一点帮助,因为我也是初学者,遇到的很多问题可能某些朋友也会遇到,不多说了,开始写了。
今天开发中遇到个小问题,就是.netMD5加密后的结果与Java加密后的结果不一样,于是百度和google了很久,没找到什么好的解决方法,搜到的大多是因为中文字符加密的不同,此处这个我就不多说了,网上有很多朋友介绍了,主要就是编码方式的不一样,其实像涉及到中文字符的地方,如果出问题了,第一个要查的问题就是编码方式。
下面说说我今天遇到的问题,我方程序(.net)中用MD5加密的结果与对方程序(java)中加密的结果不一样,最后实在是查补出来什么,让对方将java的加密代码发了过来,花了两个多小时的时间,总算是解决了(说来可笑,最后还是微软的哥哥搞定的,这里拿出来分享下,多的东西部说了,直接贴代码了)。

首先来看下.net中,MD5是如何加密的,具体代码如下:

/**//// <summary>
/// MD5 16位加密
/// </summary>
/// <param name="ConvertString"></param>
/// <returns></returns>
public static string GetMd5Str16(string ConvertString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4,;
t2 = t2.Replace("-", "");
return t2;
}

/**//// <summary>
/// MD5 32位加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static  string GetMd5Str32(string str)
{
string cl = str;
StringBuilder pwd = new StringBuilder(256);
MD5 md5 = MD5.Create();//实例化一个md5对像
// 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
//byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl));
// 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
for (int i = 0; i < s.Length; i++)
{
// 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符

pwd.Append(s[i].ToString("X").PadLeft(2,'0'));
               
}
return pwd.ToString();
}

JAVA中的加密代码:

public static String getMD5String(String str)
    {
        try
        {
            byte[] res=str.getBytes();
            MessageDigest md = MessageDigest.getInstance("MD5".toUpperCase());
//下面这句是非常重要的,不知道JAVA的这个MD5算法为什么要加上这句,如果去掉这一句
//加密出来的结果和上面GetMd5Str32  方法,也就是.NET提供的MD5加密的结果是一样的
//加上这句话后加密出来的结果就不一样了,其实这句话的效果和下面加粗字体的语句效果
//一样,从JAVA API文档中发现          使用指定的 byte 数组对摘要进行最后更新,然后完成摘要计算。也就是说,此方法首先调用 update(input),向 update 方法传递 input 数组,然后调用 digest()。
            //byte[] result=md.digest(res);

            for(int i=0;i<result.length;i++)
            {
                md.update(result[i]);
            }
            byte[] hash=md.digest();

            StringBuffer d=new StringBuffer("");
            for(int i=0;i<hash.length;i++)
            {
                int v=hash[i] & 0xFF;
                 if(v<16) d.append("0");
                   d.append(Integer.toString(v,16).toUpperCase()+"");
            }
                return d.toString();
        }
        catch(Exception e)
        {
            return "";
        }
}

以上JAVA代码中注释了很多的那句话,如果加上的话,该怎么处理呢,卖个关子,呵呵...
有需要的朋友M我(binwu95042$mail.com($换成@))  或者加我Q   
分享到:
评论

相关推荐

    java与c#MD5加密方法得到不一致解决办法

    java与c#MD5加密方法得到不一致解决办法,MD5加密后得到不一致结果

    java和.net交换加密算法(.net版本)+(java版本)

    java和.net交换加密算法(.net版本)+(java版本)

    C#.net中1个很好的Md5加密的类

    太棒了 创建getMd5方法以获得userPwd的Md5值 byte类型数组的值转换为 byte类型的Md5值 将byte类型的Md5值转换为字符串 返回Md5字符串

    解决java 与C# MD5 不一致问题 代码

    解决java 与C# MD5 不一致问题

    使用.net2.0 的 MD5加密/SM3加密/RSA加密/RSA签名, 用 java解密或签名验签代码

    使用.net2.0 的 MD5加密/SM3加密/RSA加密/RSA签名, 用 java解密或签名验签代码

    Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法

    Kettle中使用JavaScript调用jar包对文件内容进行MD5加密.本文主要知识点: JavaScript调用jar包对文件内容进行MD5加密,返回加密md5值 Kettle实现对文件内容的加密,返回加密md5值 2.使用方法 1)下载jar包 ...

    Delphi MD5+Base64加密与JAVA .NET一样

    Delphi MD5+Base64加密 加密结果与JAVA .NET一样

    MD5和RSA加密算法Java完成实现

    MD5和RSA加密算法Java完成实现,及实现RSA需要用的jar包。参见博文 http://blog.csdn.net/yanzi1225627/article/details/26508035

    URLencode转码+MD5加密

    api调用的基础类,URLencode转码、MD5加密 1、获取时间戳-当前时间与1970标准时的差值(s) 2、使用java.net自带urlencode进行转换 3、32位小 MD5加密算法

    WebService服务使用Md5和SHA1加密验证登陆

    在WebService使用Md5和SHA1加密技术对用户密码进行加密处理,从而增加用户安全性。登陆判断同样通过Md5和SHA1加密密码然后和数据库经过加密密码进行比较来(它们可都是二进制滴哦!)验证用户是否存在 很好滴东西 ...

    MD5 Hash 字符串加密小工具

    简单的小工具,可以对输入的字符串进行MD5加密。 手动操作DB时有可能用到。 源码: http://download.csdn.net/source/2539200

    asp.net知识库

    ASP.NET 2.0 中的代码隐藏和编译 ASP.NET 2.0 Language Swithcer and Theme Swicher 多语言转换和多样式主题转换 ASP.NET2.0 ObjectDataSource的使用详解(1) ASP.NET2.0 ObjectDataSource的使用详解(2) ...

    JAVA上百实例源码以及开源项目源代码

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    java 易懂易用的MD5加密(可直接运行)(2)

    程序全文如下: 代码... import java.net.URLDecoder; import java.net.URLEncoder; import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.crypto.Ci

    JAVA上百实例源码以及开源项目

     Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。  设定字符串为“张三,你好,我是李四”  产生张三的密钥对(keyPairZhang)  张三生成公钥(publicKeyZhang...

    Java加密与解密的艺术配书源代码

    综合应用篇既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。Java开发者将通过本书掌握密码学和Java加密与解密技术的所有细节;系统...

    filemd5hash.jar

    此jar包可使用Java 和js调用,唯一参数传入带路径的文件名即可将文件内容加密为md5 值返回,可用作文件传输过程中的文件内容是否丢失的校验(发送时在文件名中写入文件md5值),接收时根据文件内容再次加密为md5,...

    Java加密与解密的艺术

    综合应用篇既细致地讲解了加密技术对数字证书和SSL/TLS协议的应用,又以示例的方式讲解了加密与解密技术在网络中的实际应用,极具实践指导性。Java开发者将通过本书掌握密码学和Java加密与解密技术的所有细节;系统...

Global site tag (gtag.js) - Google Analytics