【问题标题】:short encryption for integer [closed]整数的短加密[关闭]
【发布时间】:2017-07-10 08:59:06
【问题描述】:

我给出了一个加密输入整数值的任务,这个整数最大长度为 4,但是,我需要加密成一个字母数字字符串。除此之外,我从相同的值(例如 10)生成的结果必须不相同。最困难的部分是,加密字符串最多只能有 15 个长度,因为我们必须将它放在查询字符串中。这是一项艰巨的任务,我试图询问谷歌,但没有找到任何解决方案可以帮助我解决这个问题。所有的长度都太长了,不符合我需要的要求。任何加密专家都可以帮助我吗?

【问题讨论】:

  • 请包含一些示例输入和输出(在您的帖子中,而不是作为评论)。 maximum 4 integer 可以有多种读法。 另外,为什么长度对你来说如此重要?
  • 纯整数,最多输入4个整数,输出最多15个字母数字
  • 你能问你的领导为什么他/她想要这样吗?另外,我不知道6 integer 是什么意思。
  • 表示6个参数

标签: c# .net encryption public-key-encryption


【解决方案1】:

假设:“整数最大长度为 6”表示 6 个数字字符 000000-999999。

使用具有 8 字节块大小的算法进行加密,然后进行 Base64 编码,这将产生 12 个字符的输出。

将 2 个随机字节附加到 6 个字符的数据中,形成 8 个字节,这将导致在加密相同值时最多 2^16 或 65536 个不同的结果。以 ECB 模式加密和 Base64 编码。这将产生 12 个字符的输出。

要恢复输入解码 Base64 加密的数据,解密并删除 2 个随机字节。

可能的加密算法包括BlowfishXTEA、DES等。

注意:对于更大范围的不同输出,可以首先将 6 位数字转换为 3 字节的二进制表示,允许 5 个随机字节为相同的 6 位输入产生 2^40 个不同的输出。

【讨论】:

  • 我已经编辑了我的问题,也许你可以看看以确定我应该使用哪种加密方法
【解决方案2】:

我假设您想要一个函数来输入一个四位数字:[0000 .. 9999] 并产生一个 15 个字符的字母数字输出。

你没有说清楚这个函数是否是可逆的。如果不需要可逆性,那么单向哈希函数将满足您的需求。 15 个十六进制字符是 60 位或 15 个 Base32 字符是 75 位。使用更大尺寸的散列函数,截断并转换为十六进制或 Base32。 Base32 提供比十六进制更广泛的输出字符。

为了可逆性,您需要Format Preserving Encryption,其中输出大小限制为 60 或 75 个有效位。对于 60 位,使用 DES 作为基本密码,因为它具有 64 位块大小。 75位更尴尬。 128 位的 AES 具有太大的块大小,因此您可能需要编写一个简单的 76 位 Feistel 密码。这会给你很好的默默无闻,但只有中等的安全性。你没有说这个功能需要有多安全。

【讨论】:

  • 问题注释:“最大可以有15个长度的加密字符串”
  • 太复杂,无法理解,但我们需要能够可逆
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多