PHP中的MACTripleDES

我试图获得相当于C# MACTripleDES类的MAC TripleDES。

我试过跟随mcrypt() ,但这只是在TripleDES中编码。 我需要获得一个等效的MACTripleDES字符串作为在C#中生成的字符串来validation消息。

我也查看了PHP的hash_hmac()函数,但它没有给出使用TripleDES生成MAC的选项

我不确定,因为微软并不打算说他们的类符合什么标准,但我怀疑这个NIST文档是微软类计算的,只使用三重DES代替DES。

我想你必须使用mcrypt中的原语编写自己的方法。

编辑1:

受到赏金的启发,我有两个例子显示PHP和C#中的等效结果。

首先,C#:

 using System; using System.Text; using System.Security.Cryptography; namespace TDESMacExample { class MainClass { public static void Main (string[] args) { var keyString = "012345678901234567890123"; var keyBytes = Encoding.ASCII.GetBytes(keyString); var mac = new MACTripleDES(keyBytes); var data = "please authenticate me example number one oh one point seven niner"; Console.WriteLine(data.Length); var macResult = mac.ComputeHash(Encoding.ASCII.GetBytes(data)); Console.WriteLine(BitConverter.ToString(macResult)); // B1-29-14-74-EA-E2-74-2D } } } 

接下来,PHP:

  "; ?> 

MAC只是CBC加密数据的最后八个字节。 如果key,IV和padding方法匹配,则应该只能使用这些字节。

有关MAC定义的更多详细信息,请参见FIPS-81的附录F ,DES操作模式 。