JavaScript CryptoJS.enc.Base64 等效 C#

Posted

技术标签:

【中文标题】JavaScript CryptoJS.enc.Base64 等效 C#【英文标题】:JavaScript CryptoJS.enc.Base64 equivalent C# 【发布时间】:2021-11-26 21:11:32 【问题描述】:

我正在尝试转换 。 我的凝视字符串是“mickeymouse”。 toMD5 javascript 代码生成与 C# 代码匹配的结果: 98df1b3e0103f57a9817d675071504ba

但是,toB64 代码会导致 JavaScript 与 C# 的两种不同结果。

JavaScript toB64 结果:mN8bPgED9XqYF9Z1BxUEug==

C# toB64 结果:OThkZjFiM2UwMTAzZjU3YTk4MTdkNjc1MDcxNTA0YmE==

什么是 ,所以我可以在 C# 中获得相同的结果?

            // Javascript
            // var toMD5 = CryptoJS.MD5("mickeymouse");
            // toMD5 RESULT: 98df1b3e0103f57a9817d675071504ba

            // C# (match with js)
            var toMD5 = CreateMD5("mickeymouse");
            // toMD5 RESULT: 98df1b3e0103f57a9817d675071504ba


            // Javascript
            // var toB64 = toMD5.toString(CryptoJS.enc.Base64);
            // toB64 RESULT:  mN8bPgED9XqYF9Z1BxUEug==

            // C# (not matched with js)
            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(toMD5);
            var toB64 = System.Convert.ToBase64String(plainTextBytes);
            // toB64 RESULT:  OThkZjFiM2UwMTAzZjU3YTk4MTdkNjc1MDcxNTA0YmE=

【问题讨论】:

在 C# 中,您似乎正在对已经使用十六进制编码的字符串进行 base64 编码。如果这是您的 CreateMD5 函数返回的内容并且您无法更改它,请参阅 ***.com/questions/46327156/… 以首先对 MD5 结果进行非十六进制编码,然后对其进行 base64 编码。 【参考方案1】:

不确定您的 CreateMD5 函数做了什么,但计算 MD5 字节并将它们直接传递给 Convert.ToBase64String 会产生预期结果:

using var md5 = MD5.Create();
var hash = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes("mickeymouse"));
Console.WriteLine(Convert.ToBase64String(hash) == "mN8bPgED9XqYF9Z1BxUEug==");// prints True

如果您仍然需要使用CreateMD5 - 使用反向算法来将字节转换为字符串,而不仅仅是System.Text.Encoding.UTF8.GetBytes(因为System.Text.Encoding.UTF8.GetString(hash) 产生的结果与CreateMD5 不同)

【讨论】:

以上是关于JavaScript CryptoJS.enc.Base64 等效 C#的主要内容,如果未能解决你的问题,请参考以下文章

javascript的题。

javascript JavaScript isset()等效: - JavaScript

JavaScript 使用JavaScript更改CSS(JavaScript)

JavaScript之基础-1 JavaScript(概述基础语法)

前端基础-JavaScript的基本概述和语法

JavaScript