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

Encryption 将16位数字加密为32个字母数字字符,encryption,cryptography,Encryption,Cryptography,我正在寻找一种将16位数字加密为32个字符的字母数字字符串的方法 是否有一种已知的加密算法可以实现这一点(最好是非对称的)?对16位数字进行编码需要54位(或7字节) 字母数字字符串仅提供62个符号(a-z a-z 0-9)。这仅足以编码约5位。在直接编码中,5*32=160位(或20字节) 因此,你的问题归结为: 是否有一种加密算法可以将7个字节加密为不超过20个字节。如果除了[:alnum://code>之外,您还可以使用另外两个符号,那么您可以使用base64编码,将20个字节扩展到24个

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

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

对16位数字进行编码需要54位(或7字节)

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

因此,你的问题归结为:

是否有一种加密算法可以将7个字节加密为不超过20个字节。如果除了
[:alnum://code>之外,您还可以使用另外两个符号,那么您可以使用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字节——对于您的需求来说太多了

如果您可以使用公钥加密“带外”共享对称密钥,那么您可以使用对称加密,这将很容易满足您的空间要求。

对16位数字进行编码需要54位(或7字节)

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

因此,你的问题归结为:

是否有一种加密算法可以将7个字节加密为不超过20个字节。如果除了
[:alnum://code>之外,您还可以使用另外两个符号,那么您可以使用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字节——对于您的需求来说太多了

如果您可以使用公钥加密在“带外”共享对称密钥,那么您可以使用对称加密,这将很容易满足您的空间需求。

“最好是非对称加密”-不,这种长度的非对称加密很可能完全不安全。让我们假设密文是Base64编码的。这就剩下24个字节可供处理。具有192位模数的RSA将立即被破坏。您可以在没有身份验证标签的情况下查看ECIE(不可取)。“最好是非对称的”-不,这种长度的非对称加密很可能是完全不安全的。让我们假设密文是Base64编码的。这就剩下24个字节可供处理。具有192位模数的RSA将立即被破坏。您可以在没有身份验证标签的情况下查看ECIE(不可取)。