加密可打印文本,因此结果仍然可打印(可以键入)

时间:2010-01-23 21:26:25

标签: vb6 encoding base64 encode base32

我想加密许可系统的一些信息,我希望用户可以输入结果。

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

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

我正在使用VB6。

我想我会对每对(输入$(x)和键$(x))进行一些操作,然后做一个MOD以使其保持在ascii值的范围内(可能是0-9- AZ)

有关良好算法的任何建议吗?

3 个答案:

答案 0 :(得分:5)

查看Base64“加密。”

Base 64将一个数字转换为64个不同的ASCII字符,十六进制,只有16个不同的ASCII字符......使Base64更紧凑,你正在寻找。

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

根据下面的模糊棒棒糖,Base32看起来是更好的选择。如果您能找到 的示例,则可获得奖励。

编辑:我发现example of Base32 for VB6虽然我还没试过。 - 粘土

答案 1 :(得分:2)

以HEX或Base32或Base64

编码加密字节

答案 2 :(得分:0)

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

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

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

如果您不关心撤消操作,那么密钥和ID的任何卷积都可以。 XOR是最简单的。