如何创建我们自己的数字系统?

时间:2009-07-30 11:00:00

标签: language-agnostic system numbers

问题在于任何现代的非托管语言。类似C语言,delphi,任何东西。

我想创建自己的加密算法,与其他算法不同,它会减少加密字符串的长度。

我的第一个想法是创建我自己的数字系统,类似于hexadicimal,但有更多的字符。例如[0..9] + [A..Z]。这会使一个数字达到40到一位数值。我还可以添加其他数字,例如'!,。/?)(#!'等等。

我的问题是如何实现从A到Z包含0到9的这种数字系统。我必须将每个值声明为常量,最大为0xZZZZZZZZ吗?那会让我的生活变得可怕

请给我你的建议,例子。 :)

6 个答案:

答案 0 :(得分:5)

您需要改变计算机和存储的工作方式。

没有空闲记忆,也没有办法免费获得空间。在纸上书写时,更改数字系统可以为您提供更多空间,但在计算机内存中,您仍需要相同数量的位。

另请注意,如果要加密某些内容,该操作还会阻止任何有意义的压缩,因为加密内容必须尽可能接近随机。

通常在加密(GZip或类似的东西)之前完成某些表单压缩,但是通过更改数字系统无效。

P.S。使用一些经过验证的加密算法。

答案 1 :(得分:4)

通常,加密算法减小加密文本大小的方式是首先通过通用压缩算法运行文本,然后加密压缩结果。通过这种方式,您几乎总能获得比将两种算法合并为一种更好的结果。

答案 2 :(得分:2)

让我们考虑一下。

每个Base 40字符占用8位。它编码一个从0到39的数字,这只是一个超过5位实际信息的头发。

单个字节可以表示256个不同的值。基数40编码仅代表该相同字节中的40个不同值。

这似乎是每字节编码2-3位的净损失

话虽如此,基数40的值是一个字符串,仅此而已。不需要花哨的数据库声明 - 它只是一个字符串。

你编写了两个函数 - toBase40(someBytes)和toBytes(someBase40string)来将base40字符串转换为普通字符串。

如果您想要一个完善的现有解决方案,请研究base64

答案 3 :(得分:2)

已经开发出加密算法的人花费了数百万小时,在研究生和博士后花费数年来获得他们的专业知识。是什么让你认为你可以提出更好的东西?

您可能会想出一种不安全的算法。

使用现有算法并使用压缩。

答案 4 :(得分:1)

我建议在加密之前简单地压缩输入(使用gzip,zlib或其他)。这比创建自己的算法更容易,更安全。 (例如,GnuPG会这样做。)

答案 5 :(得分:1)

Base64字符串在许多计算机语言中很常见,而且非常标准。它使用以下字符:

  

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

有关详细信息,请参阅http://en.wikipedia.org/wiki/Base64