【问题标题】:String encryption only with numbers?仅使用数字进行字符串加密?
【发布时间】:2010-12-30 23:54:19
【问题描述】:

假设您的银行职员给您一个任意密码,例如hel34/hjal0@#,如果不将其写在纸上,您将无法记住它。困境:你永远不会将密码写在纸上。因此,您尝试发明一种加密的一对一映射,在其中您只写文件的密钥,只写数字,而将其余的垃圾留给您的服务器。当然,密码可以包含任意内容。

mvds 有正确的想法,改变基地。 Eugene 注意到一个错误,所以一对一的映射应该是这样的:

prime1*prime2*...*primeN <----- encoding -------> String

【问题讨论】:

  • 我认为你需要给我们一些例子。我不知道你想要什么。
  • 该死,我以为我明白了,但 1a2 == 11412 对我来说没有意义......
  • 哦,是的,'a' == 0141... 这不是一个好主意,因为不同的输入字符串可能会导致相同的“从 alphs 到 oct”的字符串。 14a == "14141" == a41。所以你在编码中丢失了信息。
  • @HH 转换基数:从右开始,每个数字相加,乘以基数^N。
  • @HH:不同之处在于,在散列中你是单向的(对完整性检查很有用),而在加密中你需要能够反转它(前提是你有一个解密密钥)。区别很重要,因为散列使用多对一映射,而加密使用一对一映射。乍一看,您的方案似乎是多对一的地图,所以我想知道这是故意还是意外。 :-)

标签: string security encryption primes


【解决方案1】:

我不知道我是否真的理解你的问题,但你可以看到你的输入是一个基数为 62 的数字 (26+26+10),你可以将它读入一个整数,然后以任何方式处理它你喜欢。然后将结果转换回您的自定义 base-62 格式。

举个例子,你的数字范围是[0-9a-zA-Z],所以0 = 0 十进制和Z = 61 十进制,10 将是 62 十进制。

那么9aZ 将是 9*62*62 + 10*62 + 61 = 35277 十进制,其质因数为 3 * 11 * 1069。

将它们转换回来会导致:9aZ = 3 * b * hg

【讨论】:

    【解决方案2】:

    首先,您的数字代码不能比密码短:较短的密码会降低保护强度。因此,您需要保持密码完整(并对其进行编码)或使其更长。

    在谈到编码时,您可以使用 BASE10 或 BASE16 编码。使用 Base16 编码,每个原始字符有 2 个字符(如果我们保持在 ASCII 字符集中),使用 Base10 编码,长度会有所不同,为了确保正确解码,每个原始 ASCII 字符最终会使用 3 个字符。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2013-08-07
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多