douyi8408 2017-08-15 22:46 采纳率: 0%
浏览 55

将C#中的HMAC Hash转换为PHP

So I am struggling with this code. I am trying to write a function in PHP that would effectively do the same thing as this method in C#:

private string CalculateSignature(string apiKey, string secretKey, long timeStamp)
    {
        // Generate the hash
        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        HMACMD5 hmac = new HMACMD5(encoding.GetBytes(secretKey));
        byte[] hash = hmac.ComputeHash(encoding.GetBytes(apiKey + timeStamp));

        // Convert hash to digital signature string
        string signature = BitConverter.ToString(hash).Replace("-", "").ToLower();
        return signature;
    }

This is all I have so far:

function calcSignature($apiKey, $secrekKey, $timeStamp)
{
    $retval = hash_hmac('md5', $secrekKey, $apiKey . $timeStamp, false);

    return $retval;
}

Any help would be greatly appreciated, thanks!

  • 写回答

1条回答 默认 最新

  • 阿里嘎多学长 2024-04-24 22:38
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    问题概括

    这个问题的目的是将C#中生成的HMAC(Hash-based Message Authentication Code)哈希值转换成PHP代码中可以生成相同结果的哈希值。

    问题出现原因

    这个问题可能出现的原因是因为在不同的编程语言中,实现HMAC算法的库和函数可能存在差异,导致即使使用相同的密钥和数据,最终生成的哈希值也可能不同。为了确保跨语言的数据一致性,需要找到一种方法使得C#和PHP能够生成相同的HMAC哈希值。

    问题解决方案

    为了解决这个问题,我们需要找到C#和PHP中实现HMAC哈希的对应函数,并且确保使用相同的哈希算法和编码方式。

    在C#中,可以使用System.Security.Cryptography命名空间中的HMACSHA256类来生成HMAC哈希。

    在PHP中,可以使用hash_hmac函数来生成HMAC哈希。

    提供代码

    以下是C#和PHP中生成HMAC哈希的示例代码:

    C# 示例代码:

    using System;
    using System.Security.Cryptography;
    using System.Text;
    
    public class Program
    {
        public static void Main()
        {
            string key = "your-secret-key";
            string message = "your-message";
            string algorithm = "SHA256";
    
            using (HMAC hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key)))
            {
                byte[] hashMessage = hmac.ComputeHash(Encoding.UTF8.GetBytes(message));
                string hashHex = BitConverter.ToString(hashMessage).Replace("-", "").ToLower();
                Console.WriteLine(hashHex);
            }
        }
    }
    

    PHP 示例代码:

    <?php
    $key = "your-secret-key";
    $data = "your-message";
    $algo = "sha256" ;
    
    $hmacHash = hash_hmac($algo, $data, $key, false);
    echo $hmacHash;
    ?>
    

    示例代码运行方式

    • C#代码需要在.NET环境中运行,可以是.NET Framework或.NET Core,使用Visual Studio或者命令行编译并运行。
    • PHP代码可以在任何支持PHP的环境中运行,比如使用命令行或者在Web服务器上通过浏览器访问。

    示例代码预期运行结果

    如果C#和PHP代码使用相同的密钥和数据,并且指定了相同的哈希算法(如SHA256),那么它们应该输出相同的HMAC哈希值。

    参考链接

    请注意,实际的密钥和消息应该替换成你的具体使用情况。同时,确保在生产环境中不要硬编码密钥,而应该使用环境变量或者配置文件来安全地管理密钥。

    评论

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类