0

ユーザー提供のファイルのファイル システム名に一意性を持たせるために、他のユーザー提供データ (この場合はユーザーの IP アドレスとランダムな整数) のハッシュ値を生成し、それをファイル名の前に付けます。このハッシュを実行するために SHA-1 アルゴリズムを選択しました。残念ながら、から返された文字列

md = MessageDigest.getInstance("SHA-1");
// Add values to the digest
String ipAddrHash = new String(md.digest());

...もちろん、あらゆる種類の奇妙なエキゾチックな文字が含まれており、そのほとんどはファイル名では許可されていません。

したがって、次のいずれかです。

  • ハッシュ値文字列を、ファイル名に使用できる「通常の文字」を含む文字列に変換するにはどうすればよいですか?
  • ファイル名ですぐに使用できる元に戻せない値を生成する、Java で使用できる単純な一方向関数はありますか?
4

4 に答える 4

3

バイトを 16 進数でエンコードして、印刷可能なファイル名を取得できます。ただし、アルゴリズムは一意性を保証しません。

または、単にUUID、またはデータベース シーケンスから返されたシーケンス番号を使用することもできます。

于 2012-07-13T11:04:35.010 に答える
2

試す:

String filename=UUID.randomUUID().toString()
于 2012-07-13T11:05:13.067 に答える
1

一意性のみの場合は、java.util.UUID. FWIW、私には同様の要件がありましたが、これは私がそれを解決するために使用したものです(LinuxとWindowsの両方で動作するソフトウェア)。UUID には英数字とハイフンのみが含まれているため、互換性のないファイル システム文字の問題はなく、一意性が保証されます。

于 2012-07-13T11:04:47.533 に答える
0

返された文字列をBase32またはBase64でエンコードし、「/」文字を安全な文字に置き換えることができます(例:「_」)。

于 2012-07-13T11:06:15.303 に答える