一意の整数(データベースID)をハッシュ/エンコードして、同様に一意の文字列を作成したいと思います。
次の要件を満たす必要があります。
- 文字または数字で始める必要があり、文字と数字のみを含めることができます。
- コンテナ名のすべての文字は小文字でなければなりません。
- 長さは3〜63文字である必要があります(ただし、短いほど良いです)
結果は可逆的である必要はなく、再現可能である必要があります。したがって、一方向ハッシュで十分です。
一意の整数(データベースID)をハッシュ/エンコードして、同様に一意の文字列を作成したいと思います。
次の要件を満たす必要があります。
結果は可逆的である必要はなく、再現可能である必要があります。したがって、一方向ハッシュで十分です。
簡単な解決策は、ベース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;
}
Base16(hex)フォーマットがすでに組み込まれているよりもリバーシブル(Base36として)で問題がない場合は、通常の人から数字をわずかに隠すにはおそらく機能します:String.Format("{0:x}", 1235)
または12345.ToString("x")
クラスを使用してbase64でエンコードされたMD5を使用できない、またはMD5CryptoServiceProvider
クラスを使用してSHA1を使用できない理由はありますか?私はベース36の暗号解読に気づいていませんが、衝突率はおそらくMD5またはSHA1の方が優れていると思います。SHA1CryptoServiceProvider