2011-06-28 12 views
0

"login"の後の2番目の引数にMD5ハッシュが必要です。ここでProcess.Ardを引数としてmd5ハッシュで起動します。

コード:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 
using System.Security.Cryptography; 

namespace LauncherBeta1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e) 
     { 

     } 

     private void button2_Click(object sender, EventArgs e) 
     { 

      var password = System.Text.Encoding.UTF8.GetBytes(maskedTextBox1.Text); 
      var account = System.Text.Encoding.UTF8.GetBytes(textBox1.Text); 

      var hmacMD5 = new HMACMD5(password); 
      var saltedHash = hmacMD5.ComputeHash(account); 

      string[] args = { "login", saltedHash }; 
      Process.Start("program.exe", String.Join(" ", args)); 
     } 

    } 
} 

は、コンパイラの構文に問題があるstring[] args = { "login", saltedHash };ラインを言います。正しい構文は何ですか?

+0

"わかりました" - いいえ、実際はそうではありません...コンパイラのエラーが表示された場合は助けになりました。まだ... –

+0

あなたは例外の詳細を含んでいないので、何も見つけることができません。メソッドの内容をtry catchで置き、例外の種類とメッセージまたはスタックトレースで質問を編集してください。 –

+0

@Davide:構文エラーがある場合、実行できないため例外が発生することはありません... –

答えて

2

ComputeHashは文字列ではなくバイト配列を返します。あなたは何とかバイト配列を文字列に変換する必要があります。たとえば、Base64エンコーディングを使用することができます。

string[] args = { "login", Convert.ToBase64String(saltedHash) }; 

しかし、エンコーディングは、プロセスが予期しているものである必要があります。代わりに、16進数でエンコードされたフォームが必要です。

string hex = BitConverter.ToString(saltedHash).Replace("-", ""); 
string[] args = { "login", hex }; 
+0

ありがとうJon Skeet! 今すぐ動作しました〜 編集:文字列に変換する必要がありました。 – Alan