将16位数加密为32个字母数字字符

时间:2016-01-18 16:25:25

标签: encryption cryptography

我正在寻找一种将16位数字加密成32个字符的字母数字字符串的方法。

是否有已知的加密算法可以实现(最好是非对称加密算法)?

1 个答案:

答案 0 :(得分:2)

需要54位(或7个字节)来编码16位数字。

字母数字字符串仅为您提供62个符号(a-z A-Z 0-9)。这仅足以编码~5位。在直接编码中,5 * 32 = 160位(或20字节)。

所以你的问题简化为:

是否有加密算法可以将7个字节加密到不超过20个字节。如果除[:alnum:]之外还可以再使用2个符号,则可以使用base64编码扩展20个字节到24个并使用标准的,易于理解的编码。

不幸的是,这并不简单:

$ openssl genpkey -algorithm RSA -out private_key.pem 2048
$ openssl rsa -pubout -in private_key.pem -out public_key.pem
$ echo -n ABCDEFG > plaintext.txt
$ openssl rsautl -encrypt -pubin -inkey public_key.pem -in plaintext.txt -out encrypted.txt
$ ls -l encrypted.txt
-rw-r--r--  1 john  staff  128 Jan 18 10:40 encrypted.txt

生成的文件是128个字节 - 对于您的要求来说太多了。

如果您可以使用公钥加密来“带外”共享对称密钥,那么您可以使用对称加密来轻松满足您的空间要求。

相关问题