2013-01-31 75 views
0

我有一个8位数字段,我想将其加密(我不担心解密它)为16个字符(或更多)字段。我需要这个,所以我可以使用加密的字段发送给报告机构。将8位字段加密为16位(或更多)字符的加密例程

+3

报告机构将如何处理它?另外,你在什么环境下工作(C++,Python,PHP等?) – msanford

+1

你想要通过“加密”字段来达到什么目的? 8位数字到16位字符的映射必须是一对一的映射吗?还有其他要求吗?了解这些事情对我们来说至关重要,以便正确回答您的问题。 –

+0

正如其他人也指出的那样,这个问题还不够具体。例如,没有办法知道如果将字段作为具有Cast-128的单个块进行加密就能满足要求。 – Jack

回答

1

既然你不需要解密,你可以散列它(不可逆),而不是使用加密。在PHP中,您可以使用hashfnv164散列算法执行此操作,该算法返回16个字符的散列。

此外,还有其他几个哈希算法会产生超过16个字符。您可以使用hash_algos来查看系统上可用的内容。 Here's一个脚本来做到这一点。

+1

如果我们确实在谈论冷冻造影术,那么提议的散列是不安全的(足够) –

+0

他没有提到任何安全性。只有该字段需要加密。 – Isius

+1

加密听起来像我的安全。我们还不完全确定,因此评论。 –

1

,无需了解这背后的“加密”的宗旨太多这里是我建议的内容(根据你的目标是什么有些保守和安全保护的假设):

  1. 选择一个随机数。叫它R。数字最好至少为32位。
  2. 对于您拥有的每个8位数标识符,请组成字符串“<digits of R><8 digit identifier>”。
  3. 使用一些密码安全的散列算法来获取步骤2中形成的字符串的散列。
  4. 将步骤3中的散列格式化为十六进制字符串。
  5. 使用步骤4中的十六进制字符串作为报告给“报告机构”的标识符。

这个方案的好处是,只要你记得值R你可以总是映射每个8位数的标识符到相同的十六进制字符标识符。这在您的应用程序中可能很重要,也可能不重要。

当然,这个方案假设你永远不需要执行一个revese映射,并且该机构不想解密标识符。换句话说,它假设你的目标只是不给机构标识符I而是一个等同标识符I'。

+0

看起来像尝试重新发明HMAC给我。这背后的动机是什么? – Jack

+0

AN HMAC是非常不同的,我没有声称以上是为了实现HMAC的功能。我在我的解决方案中假定的要求 - 基于OP提供的最小和令人困惑的信息 - 他的意图是从'ID'到'ID'进行一对一的映射。 –

+0

是的。我同意HMAC是另一回事。 HMAC是正确的keyd哈希。在尝试相同的情况下进行施工并不能实现这一目标。最大的问题是小键盘(32位) – Jack