【问题标题】:Encrypt printable text so result is still printable (can be typed)加密可打印文本,因此结果仍然可打印(可以输入)
【发布时间】:2011-01-08 15:35:13
【问题描述】:

我想为许可系统加密一些信息,并且我希望用户能够输入结果。

更新:此操作必须是可逆的(可解密) 例如。, 加密(ComputerID+ProductID)->(可以输入的任何标准 ASCII 字符。理想情况下甚至可能只是 A-Z)。

到目前为止,我所做的是将加密文本转换为 HEX(因此它是从 0 到 F 的任何字符),但这会使字符数增加一倍。

我正在使用 VB6。

我在想我会对每对 (Input$(x) 和 Key$(x)) 做一些操作,然后做一个 MOD 以将其保持在一个 ascii 值范围内(可能是 0-9- AZ)

有什么好的算法建议吗?

【问题讨论】:

  • 一个更好的标题可能是“对加密文本进行编码以便于输入”
  • 您真正想要的是加密字节的编码方案,请参阅我在 base32 上的更新答案

标签: vb6 encoding base64 encode base32


【解决方案1】:

查看 Base64“加密”。

Base 64 会将一个数字转换为 64 个不同的 ASCII 字符,而十六进制只有 16 个不同的 ASCII 字符...使 Base64 更紧凑,更符合您的需求。

编辑: 在 VB6 中执行此操作的代码可在此处获得:http://www.nonhostile.com/howto-encode-decode-base64-vb6.asp

根据下面的 Fuzzy Lollipop,Base32 看起来是一个更好的选择。如果您能找到 that 的示例,则可以加分。

编辑:我找到了example of Base32 for VB6,虽然我还没有尝试过。 -粘土

【讨论】:

  • base64 不是加密它是编码,base64 没有任何密码
  • 因此我在这个词周围使用了 "" :)
  • 我找不到 Base32 的 VB6 实现,但实现起来非常简单。对于编码函数,只需将输入 0-26 映射到 a-z,并将输入 27-32 映射到 2-7。 base32 表示 2^5,所以 char = 'A' + 5bits。如果结果>'Z',则将'Z'和结果之间的差添加到'2'。 :)
【解决方案2】:

将加密字节编码为 HEX、Base32 或 Base64

【讨论】:

  • +1 表示 Base32,它使用 A-Z(不区分大小写)和 2-7,因此区分 0-O 或 1-I-l 并不难
  • 我忘记了 0-O 和 I-1 的相似性。很好的想法。如果你能提供一个例子,你就会得到成功的答案。
【解决方案3】:

您是否希望这是可逆的——从加密文本中恢复 ID?如果是这样,那么如何组合键和输入字符串很重要。

通常你会对每个字节对进行异或(使用字节数组来避免 Unicode 问题),如果它比输入短,则在键字符串上循环。然后,您可以使用 Base N 编码(32、64 等)生成许可证字符串。

这两种操作都是可逆的:您可以从 Base N 字符串中恢复 XORed 字符串,然后再次与密钥进行 XOR 以获得原始 ID。

如果您不关心反转操作,那么任何键和 ID 的卷积都可以。 XOR 是最简单的。

【讨论】:

    猜你喜欢
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多