加密和压缩文件名

时间:2012-12-24 08:29:53

标签: java file encryption file-io hash

说,我有一个包含有关对象信息的文件。我使用名称创建它,以便文件名本身包含有关对象的某些信息,如对象Id,对象Parent Id,一些其他元ID信息和文件序列号。这样做是因为文件可用于不同的模块,并避免多个数据库访问文件的元信息。

filename =“OB”+ fileId + parentId + metaId + sequence +“。txt”

序列从00001开始到99999(也可能非常大)

因此,每个索引的每个数字都具有特定含义

现在,文件信息将提供给我们应用程序之外的程序,我不希望其他应用程序知道我使用的详细信息。所以,我想在发送之前使用加密或散列文件名该文件,文件中的响应文件名也加密或散列,他们将根据文件内容向我发送带有加密/散列响应文件名的响应

有2个挑战:

  1. 在不涉及数据库

  2. 的情况下,这是最快速,最简单的方法
  3. 文件名长约25个字符(带有其他id和序列信息),所以我希望生成的文件名更小(尽可能小)和标准大小。

  4. 或任何可以使用的替代机制???

1 个答案:

答案 0 :(得分:1)

选项1哈希

使用加密哈希算法(如SHA-256或SHA-128)会使您的文件名更长,虽然它会提供非常好保证它是唯一的,但没有任何保证(所有哈希算法都受到影响)来自生日悖论)。

由于没有任何保证SHA-256或SHA-128会生成唯一的文件名,并且根据您需要的安全级别,您可能需要查看Adler32。这个算法不会像SHA系列那样安全,主要是因为得到的散列大小非常小,你可以很容易地强制它。但是,Adler32可以提供文件名的混淆。

因为Alder32产生的散列大小很小(32位),所以碰撞的几率远远高于SHA系列,因此你肯定需要保留某种具有文件名和相应散列的表。值(在这个或SHA情况下推荐)。该表可以是存储在缓存中的简单列表,但主要原因是如果发生冲突,则需要更改值以计算新哈希值。

选项2加密

加密不会使您的数据变小,最好它们的大小相同(如果您的数据大小可以被算法的块大小整除)。但是,它将保留所有数据,而无需保持表格的加密值。如果您决定使用加密而不是哈希,那么我会使用AES而不是其他原因。加密文件名是如此少量的数据,您可能不会注意到算法之间的任何差异,但如果您有足够的偏执,您可以查看Intel CPU's上的AES指令集。