2016-02-18 79 views
-4

我有一些問題,把這項PHP代碼到C#:SHA384 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; 

回答

0

我不擅長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(); 
    } 
} 
+0

謝謝!會嘗試! –

+0

使用「客戶端客戶端=新客戶端();」? –

+0

這是錯誤地複製。我刪除了它.. –