• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#与PHP的md5计算结果不同的解决方法

C#与PHP的md5计算结果不同的解决方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

问题重现

这个 API 是当时给 Lyra 应用做激活用的,遂打开 Lyra 试了下,却发现一切正常,于是可以排除服务端的问题

放出导致错误的源码(来自 MSDN):

public string CalculateMD5Hash(string input)
{
  // step 1, calculate MD5 hash from input
  MD5 md5 = System.Security.Cryptography.MD5.Create();
  byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
  byte[] hash = md5.ComputeHash(inputBytes);
  // step 2, convert byte array to hex string
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < hash.Length; i++)
  { sb.Append(hash[i].ToString(“X2”));
  }
  return sb.ToString();
}
</div>

实质

MD5 有很多版本,其实这段代码并没有错,但是 php 的 md5 函数默认返回的是 32位小写 ,而以上这一段返回的是 16位小写

于是想办法把这个 func 改为 32位小写输出即可

public static String md5(String s)
{
  MD5 md5 = new MD5CryptoServiceProvider();
  byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);
  bytes = md5.ComputeHash(bytes);
  md5.Clear();

  string ret = "";
  for (int i = 0; i < bytes.Length; i++)
  {
    ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0');
  }
  return ret.PadLeft(32, '0');
}
</div>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28C#信号量用法简单示例
  • 2017-05-28C# Redis学习系列(二)Redis基本设置
  • 2017-05-28c# EnumHelper枚举常用操作类
  • 2017-05-28DevExpress获取TreeList可视区域节点集合的实现方法
  • 2017-05-28C#内置队列类Queue用法实例
  • 2017-05-28C#绘制曲线图的方法
  • 2017-05-28C#控制IE进程关闭和缓存清理的实现代码
  • 2017-05-28深入浅出23种设计模式
  • 2017-05-28c#深拷贝文件夹示例
  • 2017-05-28C#中父窗口和子窗口之间控件互操作实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#十六进制字符串转十进制int的方法
    • .NET中的静态与非静态的区别分析
    • c#二进制逆序方法详解
    • 基于C# 中可以new一个接口?的问题分析
    • winform基于异步委托实现多线程摇奖器
    • C#实现的文件操作封装类完整实例【删除,移动,复制,重命名】
    • C#中Json的简单处理方法
    • c#生成站点地图(SiteMapPath)文件示例程序
    • 通过特性(attribute)为枚举添加更多信息示例
    • 详解C#中的委托

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有