2010-11-26 4 views
0

このjavascriptをC#に変換すると、ちょっと困惑します...JavaScriptをC#に換える

助けていただければ幸いです!ここで

はjavascriptのです:

function d(strInput) { 
    strInput = decoder(strInput); 
    var strOutput = ""; 
    var intOffset = (key + 112)/12; 
    for (i = 4; i < strInput.length; i++) { 
     thisCharCode = strInput.charCodeAt(i); 
     newCharCode = thisCharCode - intOffset; 
     strOutput += String.fromCharCode(newCharCode) 
    } 
    document.write(strOutput) 
} 

そして、これは、C#に変換で私の試みです。それは時間の一部を動作しますが、キーとして負の数のためにほとんどの時間...

public string decode(int key, string data) 
{ 
    int i; 
    string strInput = base64Decode(data); 
    StringBuilder strOutput = new StringBuilder(""); 

    int intOffset = (key + 112)/12; 
    for (i = 4; i < strInput.Length; i++) 
    { 

     int thisCharCode = strInput[i]; 
     char newCharCode = (char)(thisCharCode - intOffset); 
     strOutput.Append(newCharCode); 
    } 
    return strOutput.ToString(); 
} 

は現在、それは次のように出力します

(int key = 212, string data = "U0lra36DfImFkImOkImCW4OKj4h8hIdJfoqI") 
Output = {c¬a¬¬¬¬¬¬¬¬@¬¬¬¬a¬¬.c¬¬} 


(int key = -88, string data = "T1RXYmV0cHFkZ3R1MzQ1Ng==") 
Output = {crnobers1234} 
+0

どの出力が正しいのですか?負のキーを持つものは正しいですか?最初の例の入力データが正しく表示されません。元のエンコードされていない文字列は何でしたか? –

+0

これは動作しているjavascriptのバージョンです:http://bypass.rd.to/decoder.php – E3pO

+0

Javascriptのバージョンで呼び出される "decoder"関数は何をしますか?私はあなたのC#のバージョンに基づいてBase64の文字列をデコードする意味ですか? – Carson63000

答えて

2

このコードは、あなたの例と同じ結果を与えます2つのサンプル入力の場合:

public string decoder(string data) 
    { 
     string b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 
     char o1, o2, o3; 
     int h1, h2, h3, h4, bits, i = 0; 
     string enc = ""; 
     do 
     { 
      h1 = b64.IndexOf(data.Substring(i++, 1)); 
      h2 = b64.IndexOf(data.Substring(i++, 1)); 
      h3 = b64.IndexOf(data.Substring(i++, 1)); 
      h4 = b64.IndexOf(data.Substring(i++, 1)); 
      bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; 
      o1 = (char)(bits >> 16 & 0xff); 
      o2 = (char)(bits >> 8 & 0xff); 
      o3 = (char)(bits & 0xff); 
      if (h3 == 64) enc += new string(new char[] { o1 }); 
      else if (h4 == 64) enc += new string(new char[] { o1, o2 }); 
      else enc += new string(new char[] { o1, o2, o3 }); 
     } while (i < data.Length); 
     return enc; 
    } 

    public string d(int key, string data) 
    { 
     int i; 
     string strInput = decoder(data); 
     StringBuilder strOutput = new StringBuilder(""); 

     int intOffset = (key + 112)/12; 
     for (i = 4; i < strInput.Length; i++) 
     { 

      int thisCharCode = strInput[i]; 
      char newCharCode = (char)(thisCharCode - intOffset); 
      strOutput.Append(newCharCode); 
     } 
     return strOutput.ToString(); 
    } 

私はそれがいくつかのクリーンアップを行うことができると確信しています!それはそれをしたJavascriptのdecoder()関数のちょっとした翻訳です。

+0

ありがとうございます。あなた自身で変換したのですか、プログラムを使用しましたか? – E3pO

+0

それを自分自身に変換しました。構文はJavascriptとC#の間にかなり近いです。 :-)ちょっとしたタイプのバイリンガル。 – Carson63000

関連する問題