请教如何把MD5(unicode)码转化成普通MD5码

Y御剑逍遥Y 2020-08-08 04:00:02
最近工作需要,碰到这个问题
例如:123456的MD5(unicode)=ce0bfd15059b68d67688884d7a3d3e8c
如何转化成 MD5=e10adc3949ba59abbe56e057f20f883e

请懂的大大 不吝赐教
...全文
6993 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
github_36000833 2020-08-08
  • 打赏
  • 举报
回复
MD5本身倒是固定的算法,即输入一个任意长度的字节数组,输出一个长度为16的字节数组。 但是,如果输入是字符串,那么那么字符串转换为MD5能处理的字节数组,就存在着多种的方法。 Unicode(也就是UTF-16)编码是一种字符串/字节数组的转换: "123456" => [0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x35, 0x00, 0x36, 0x00] UTF8编码转换,则为: "123456" => [0x31, 0x32, 0x33, 0x34, 0x35, 0x36] 对MD5来说,这是两种不同的输入。 虽然这两种输入相关性很大,但是MD5作为一种设计良好的摘要算法,有良好的雪崩效应,就是说哪怕一个bit的改动,会导致结果面目全非。 输入的相关性并不能导致输出的可推导性(否则MD5就不是合格的摘要算法了)。
Y御剑逍遥Y 2020-08-08
  • 打赏
  • 举报
回复
引用 1 楼 github_36000833的回复:
知道原始输入当然就简单了: var hash = md5.ComputeHash(Encoding.UTF8.GetBytes("123456")); var hexStr = BitConverter.ToString(hash).Replace("-", "").ToLower(); // e10adc... 如果想从ce0bfd15059b68d67688884d7a3d3e8c转换为e10adc... 那你就要放弃了。因为一般意义上说,MD摘要不能倒推出原始输入。
也就是MD5UNICODE和MD5在处理原始数据时就不一样了?
github_36000833 2020-08-08
  • 打赏
  • 举报
回复
MD5是一种摘要算法,也是一种‘信息’减少的过程。试想一个100兆的文件,得出16字节的MD5摘要,就能理解信息减少的含义。 信息减少是不可逆的。100兆字节的数据,可以确定性的得到一个16字节摘要;但是,一个16字节的摘要,却不能倒推出100兆字节的原始数据。
github_36000833 2020-08-08
  • 打赏
  • 举报
回复
知道原始输入当然就简单了: var hash = md5.ComputeHash(Encoding.UTF8.GetBytes("123456")); var hexStr = BitConverter.ToString(hash).Replace("-", "").ToLower(); // e10adc... 如果想从ce0bfd15059b68d67688884d7a3d3e8c转换为e10adc... 那你就要放弃了。因为一般意义上说,MD摘要不能倒推出原始输入。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧