使用大写字母加密而不使用特殊字符

时间:2014-01-10 11:39:53

标签: .net vb.net encryption cryptography

我正在搜索一些加密/解密算法,它只给我大写字母和 没有 特殊字符(+,/,=)。我使用了 DES 算法和 Rijndael(AES)算法,但这两个算法都给了我特殊的字符和混合的大写和小写字符。

我需要可读的许可才能创建,因为对我和我的客户来说,在他们需要时更容易理解它。

如果您需要我可以提供的更多信息,请告诉我。

2 个答案:

答案 0 :(得分:3)

加密始终是二进制的。您可以将二进制数据编码作为字符串,例如,在Base64中。这确实包含小写字母和一些特殊字符。

Base64使用64个字符,因此得名。这是6位信息(2 ^ 6)。但是你需要编码8位字节。那么Base64所做的就是从输入中获取3个字节(3 * 8 = 24位),并将其转换为4个字符(4 * 6 = 24位)。

您需要做的不同之处在于您拥有较小的字符集。有26个大写字母。我建议你找到6个可接受的字符,然后每个字符得到5位(2 ^ 5 = 32)。或者只使用16个字符,即每个字符4位(2 ^ 5 = 16)。

这提醒我,每个字符4位基本上是十六进制编码。所以这是最简单的解决方案。将二进制数据转换为十六进制,然后得到0..9和A..F字符。然后将0..9更改为G..P。现在你有一个只包含字母A到P的字符串。你甚至可以跳过大写字母O或I来使它更容易混淆。

您可以在任何地方找到二进制到六进制转换,反之亦然,也可以在SO上找到。您可以使用正确填充的Dictionary<char, char>进行角色映射(对不起,我是C#家伙,不知道它在VB中调用了什么)。

答案 1 :(得分:0)

  

我正在搜索一些加密/解密算法,它只给出大写字母而没有特殊字符(+,/,=)。

看看Base26 Encoding

  

我正在尝试加密字符串(日期+几个数字+ customerId)。

这很有意思,因为输入字母表几乎都是数字。如果您可以将其格式化为所有数字,那么您可以尝试使用小空间格式保留加密(FPE)方案。

现代PFE基于分组密码构建,并包含调整功能。请看Phillip Rogaway的A Synopsis of Format-Preserving Encryption作为介绍。