【转】如何使php的MD5与C#的MD5一致?

有c#生成MD5的代码如下:

   class CreateMD5
    {
        static void Main(string[] args)
        {
            string source = "提问指南";
            using (MD5 md5Hash = MD5.Create())
            {
                string hash = GetMd5Hash(md5Hash, source);

                Console.WriteLine( hash);
            }
        }
        static string GetMd5Hash(MD5 md5Hash, string input)
        {
            //这里是 Unicode
            byte[] data = md5Hash.ComputeHash(Encoding.Unicode.GetBytes(input));

            StringBuilder sBuilder = new StringBuilder();

            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
            return sBuilder.ToString();
        }
    }

上述代码生成的MD5是 f5da53705563c657581a6d0853286fdc 现在问题是,c#生成的MD5 与 PHP 生成的MD5 不一致

由于业务限制,不能更改c#代码,只能从PHP下手。

回答:

md5前操作一步

$tmp = mb_convert_encoding(‘提问指南‘, ‘utf-16le‘, ‘utf8‘);

原文:c#兼容 PHP中的md5

由于工作需要,需要使用C#去对一个php程序做二次开发.在登录验证的时候,发现一个小问题.

就是用C#写的md5算法得出的结果和php的md5()得出的结果有时候会不一样. 导致有些账号的密码验证不能通过.后来网上找了一下,在国外一个网站上找到了答案.

C#常用的MD5算法.

public static string MD5(string password) {
   byte[] textBytes = System.Text.Encoding.Default.GetBytes(password);
   try {
      System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler;
      cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider();
      byte[] hash = cryptHandler.ComputeHash (textBytes);
      string ret = "";
      foreach (byte a in hash) {
            ret += a.ToString ("x");
      }
      return ret ;
   }
   catch {
      throw;
   } 

}

但是此算法与md5()得出的结果是不一样的.后调整为如下,即可以了.

public static string MD5(string password) {
   byte[] textBytes = System.Text.Encoding.Default.GetBytes(password);
   try {
      System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler;
      cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider();
      byte[] hash = cryptHandler.ComputeHash (textBytes);
      string ret = "";
      foreach (byte a in hash) {
         if (a<16)
            ret += "0" + a.ToString ("x");
         else
            ret += a.ToString ("x");
      }
      return ret ;
   }
   catch {
      throw;
   } 

}

时间: 2024-10-04 00:04:30

【转】如何使php的MD5与C#的MD5一致?的相关文章

MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)

MD5 编辑 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992). MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑

【OBJC类扩展之MD5加密】NSString+MD5

#import<Foundation/Foundation.h> @interface NSString (md5) - (NSString *) md5; @end #import "NSString+MD5.h" #import<CommonCrypto/CommonDigest.h> @implementation NSString (md5) - (NSString *) md5 { const char *cStr = [selfUTF8String]

MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.security.MessageDigest; impor

MD5碰撞后时代,MD5还有存在的意义吗?

MD5是一种HASH函数,又称杂凑函数,由32位16进制组成,在信息安全范畴有广泛和首要运用的暗码算法,它有类似于指纹的运用.在网络安全协议中, 杂凑函数用来处理电子签名,将冗长的签名文件紧缩为一段一起的数字信息,像指纹辨别身份相同保证正本数字签名文件的合法性和安全性.在前面提到的SHA- 1和MD5都是现在最常用的杂凑函数.经过这些算法的处理,初始信息即使只更动一个字母,对应的紧缩信息也会变为大相径庭的“指纹”,这就保证了经过处理 信息的唯一性.为电子商务等提供了数字认证的可能性. 安全的杂凑

关于php MD5加密 与java MD5 加密结果不一致的问题

针对PHP不是UTF-8编码导致的问题 public String md5(String txt) {              try{                   MessageDigest md = MessageDigest.getInstance("MD5");                   md.update(txt.getBytes("GBK"));    //问题主要出在这里,Java的字符串是unicode编码,不受源码文件的编码影响

C# MD5 16进制MD5对称加密法

/// <summary> /// MD5 16进制算法 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string Getmd5(string str) { //创建MD5对像 MD5 md5 = MD5.Create(); //将字符串转换成数组 byte[] ba = Encoding.D

eclipse4.2.2在线安装testng提示MD5值错误:MD5&#160;hash&#160;is&#160;not&#160;as&#160;expected

2017.9.9在eclipse4.2.2安装testng时出现两个问题: 起始步骤: 1.选择菜单:Help->Install New Software,在弹出的窗口中的Work with后面的输入框中输入:http://beust.com/eclipse,点击add,输入随意名称如:testng,点击OK 2.等待name处出现testng时,选择testng 3.点击next-- 问题1:卡在calculating requirements and dependencies不动了 解决  

MD5加密和RSA加密

1.MD5加密  MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用. MD5的功能:     ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹):    ②.不同的输入得到的不同的结果(唯一性):    ③.根据128位的输出结果不可能反推出输入的信息(不可逆),也就是只能加密,不能解密:  MD5的用途:     1.防止被篡改:    1)比如发送一个电子文档,发送前,我先得到MD5的

C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)

一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应位其中一个为1另一个为0,则返回1. //对数字加密 int P_int_Num, P_int_Key;//定义两个值类型变量 string Encryptstr = (P_int_Num ^ P_int_Key).ToString();//加密数值 //对数字解密 int P_int_Key, P_int_