3

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

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

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

我正在使用VB6。

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

有什么好的算法建议吗?

4

3 回答 3

5

查看 Base64“加密”。

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

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

根据下面的 Fuzzy Lollipop,Base32 看起来是一个更好的选择。如果你能找到一个例子,那就加分。

编辑: 虽然我还没有尝试过,但我找到了一个用于 VB6 的 Base32 示例。-粘土

于 2010-01-23T21:29:22.273 回答
2

以 HEX、Base32或 Base64对加密字节进行编码

于 2010-01-23T21:29:48.297 回答
0

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

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

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

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

于 2010-01-23T22:26:41.027 回答