2016-07-28 4 views
1

xxxx-xxxx-xxxx-xxxx- xxxxから文字列を取得し、その文字列を持っていれば、その文字列から元の文字列をC#で抽出できます。私はGoogleの検索を持っている私は必要な形式に文字列を変換するいくつかのソリューションを見つけたが、彼らは元の文字列を出力から取得しないでください。それを達成する方法はありますか?文字列をアクティベーションキー(形式xxxx-xxxx-xxxx-xxxx-xxxx)に変換し、アクティベーションキーから元の文字列を抽出する方法

私の希望するフォーマットの文字列を変換するMD5のサンプルがありますが、その文字列を文字列に変換できません。

private static string GetHash(string s) 
{ 
    MD5 sec = new MD5CryptoServiceProvider(); 
    ASCIIEncoding enc = new ASCIIEncoding(); 
    byte[] bt = enc.GetBytes(s); 

    return GetHexString(sec.ComputeHash(bt)); 
} 

private static string GetHexString(byte[] bt) 
{ 
    int tmp = (int)'A'; 
    string s = string.Empty; 
    for (int i = 0; i < bt.Length; i++) 
    { 
     byte b = bt[i]; 
     int n, n1, n2; 
     n = (int)b; 
     n1 = n & 15; 
     n2 = (n >> 4) & 15; 
     if (n2 > 9) 
     { 
      tmp = 0; 
      tmp = (n2 - 10 + (int)'A'); 
      s += ((char)(n2 - 10 + (int)'A')).ToString(); 
     } 
     else 
      s += n2.ToString(); 
     if (n1 > 9) 
     { 
      tmp = 0; 
      tmp = (n1 - 10 + (int)'A'); 
      s += ((char)(n1 - 10 + (int)'A')).ToString(); 
     } 
     else 
      s += n1.ToString(); 
     if ((i + 1) != bt.Length && (i + 1) % 2 == 0) s += "-"; 
    } 
    return s; 
} 
+1

MD5と他の*ハッシング*アルゴリズムは*リバーシブルではありません*、あなたが求めるものはできません。あなたは、AESのような暗号化アルゴリズムと、その出力のプレーンテキストエンコードされ&フォーマットされた表現が必要です。 –

+0

ああ、右。暗号化が実装されており、暗号化された文字列をデコードできます。しかしここで私はxxxx-xxxx-xxxx-xxxx-xxxxの形式でそれを必要とします。それはアクティベーションコードのように見えるはずですが、元の文字列にデコードできます。 –

+0

文字列暗号化のバイトバッファ出力を取り出し、それをエンコード(hex | base64)し、文字列をフォーマットし、受信し、フォーマットを取り除き、バイトバッファにデコードし、復号化します。 –

答えて

0

元の文字列を再度復号化できるように、何らかの暗号化を使用する必要があります。 MD5はハッシュ関数です。つまり、文字列をハッシュした後、ハッシュを元の文字列に戻すことができる(アルゴリズム的な)関数はありません。

暗号化機能を使用して平文を暗号文に暗号化したら、可逆機能であれば、この暗号化された文字列を好きな任意の形式でフォーマットすることができます。暗号化された文字列が "123456789"であるとします。これを "12 - 3456 - 6 - 789"と書いてみましょう。

セパレータを追加した文字の数を知っていることを考えれば、このキーを暗号文に戻し、復号化方法を使用して元の文字列を取得することができます。

メモ:私はあなたに何らかの電子メールの確認をする必要があると思います。もっと簡単な方法でこれを行う良い方法は、電子メール(またはあなたが確認しているもの)からsaltでハッシュを作成し、電子メールとともにこの文字列をユーザーに送信することです。アクティベーションキーをデータベースに保存したので、対応する電子メールアドレスとキーを簡単に結合できます。

+0

暗号化アルゴリズムがうまくいきました。文字列が "123456789"の場合は、上記のように出力をフォーマットする必要があります。文字列 "12 - 3456 - 6 - 789"に変換してから再度デコードしてください。 –

+0

それでは、そうしてください。あるいは、あなたのためにどのようなコードがそれを行うことができるのか尋ねていますか?その場合は、ここで別の質問をするか、Googleに「セパレータ付きの書式文字列」という質問をすることをおすすめします。それを再びデコードすることは、暗号化方法に属する復号化方法を呼び出すことの問題である。暗号化機能しか見つからなかった場合は、それを使って復号化機能を検索する必要がありますが、私があなたの場合はプラグインを使用しています。それらには、通常、暗号化機能と復号化機能の両方がすでに定義されています。 – Glubus

関連する問題