我正在寻找一种将16位数字加密成32个字符的字母数字字符串的方法。
是否有已知的加密算法可以实现(最好是非对称加密算法)?
答案 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个字节 - 对于您的要求来说太多了。
如果您可以使用公钥加密来“带外”共享对称密钥,那么您可以使用对称加密来轻松满足您的空间要求。