【问题标题】:SHA384 PHP code translate to C#SHA3​​84 PHP 代码转换为 C#
【发布时间】:2016-02-18 11:12:31
【问题描述】:

我在将这个 PHP 代码翻译成 C# 时遇到了一些问题:

$hash = hash('sha384', $string_to_hash, true); 
$base64Hash = strtr(base64_encode($hash), '+/', '-_');

你能帮帮我吗? 谢谢!

编辑:我正在使用整个 PHP 代码更新这篇文章以转换为 C#,因为我无法使用两种语言获得相同的散列令牌

$host = "100.200.100.200"; 
$url= "http://".$host.":1935/";
$stream = "vod/_definst_/test.smil"; 
$start = time();
$end = strtotime("+30 minutes");
$secret = "abcde";
$tokenName = "wowzatoken";

$hash = hash('sha384', $stream."?".$secret."&{$tokenName}endtime=".$end."&{$tokenName}starttime=".$start, true); 
$base64Hash = strtr(base64_encode($hash), '+/', '-_');
$params = array("{$tokenName}starttime=".$start, "{$tokenName}endtime=".$end, "{$tokenName}hash=".$base64Hash);

$playbackURL = $url.$stream."/playlist.m3u8?";

foreach($params as $entry){
    $playbackURL.= $entry."&";
}

$playbackURL = preg_replace("/(\&)$/","", $playbackURL);

echo $playbackURL;

【问题讨论】:

    标签: c# php .net hash


    【解决方案1】:

    我不擅长 PHP,所以我不确定 strtr 函数。但我已尝试解决您的问题并在下面提供一些代码。试试看。

     class Program
    {
        public static string Base64Decode(string base64EncodedData)
        {
            var base64EncodedBytes = System.Convert.FromBase64String(base64EncodedData);
            return System.Text.Encoding.UTF8.GetString(base64EncodedBytes);
        }
    
        public static string Base64Encode(string plainText)
        {
            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
            return System.Convert.ToBase64String(plainTextBytes);
        }
    
        public static string GetString(byte[] bytes)
        {
            char[] chars = new char[bytes.Length / sizeof(char)];
            System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
            return new string(chars);
        }
    
        public static byte[] GetBytes(string str)
        {
            byte[] bytes = new byte[str.Length * sizeof(char)];
            System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
            return bytes;
        }
    
        static void Main(string[] args)
        {
            string code = "SecretCode";
    
            byte[] data = new byte[code.Length];
            byte[] result;
            data = GetBytes(code);
            SHA384 shaM = new SHA384Managed();
            result = shaM.ComputeHash(data);
    
            string encodedString = GetString(result);
    
            string ans = Base64Encode(encodedString);
    
            ans = ans.Replace('+','-').Replace('/','_');
    
            Console.Write(ans);
            Console.Read();
        }
    }
    

    【讨论】:

    • 使用“Client client = new Client();”?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多