1

一意の整数(データベースID)をハッシュ/エンコードして、同様に一意の文字列を作成したいと思います。

次の要件を満たす必要があります。

  1. 文字または数字で始める必要があり、文字と数字のみを含めることができます。
  2. コンテナ名のすべての文字は小文字でなければなりません。
  3. 長さは3〜63文字である必要があります(ただし、短いほど良いです)

結果は可逆的である必要はなく、再現可能である必要があります。したがって、一方向ハッシュで十分です。

4

3 に答える 3

4

簡単な解決策は、ベース36エンコーディングです。出力は、1〜6文字の文字列になります。

public static string EncodeBase36(int i)
{
  Contract.Requires<ArgumentException>(i>=0);
  //Base conversion
  string s="";
  while(i!=0)
  {
    int digit = i % 36;
    i/=36;
    if(digit<10)
      s=((char)('0'+digit)).ToString()+s;
    else
      s=((char)('a'+digit-10)).ToString()+s;
  }
  // Enforce minimum length
  while(s.Length<3)
  {
    s = "0" + s;
  }
  return s;
}
于 2012-09-07T15:30:36.570 に答える
1

Base16(hex)フォーマットがすでに組み込まれているよりもリバーシブル(Base36として)で問題がない場合は、通常の人から数字をわずかに隠すにはおそらく機能します:String.Format("{0:x}", 1235)または12345.ToString("x")

于 2012-09-07T16:25:36.327 に答える
1

クラスを使用してbase64でエンコードされたMD5を使用できない、またはMD5CryptoServiceProviderクラスを使用してSHA1を使用できない理由はありますか?私はベース36の暗号解読に気づいていませんが、衝突率はおそらくMD5またはSHA1の方が優れていると思います。SHA1CryptoServiceProvider

于 2012-09-07T15:36:27.313 に答える