谁能告诉我如何使用命令行工具接收 16 个字符的字符串并生成一个 16 个字符的加密字符串(以人类可读的格式)。
我已经探索过诸如 openssl 之类的选项,但我无法控制输出的长度。
有人可以建议吗?
谁能告诉我如何使用命令行工具接收 16 个字符的字符串并生成一个 16 个字符的加密字符串(以人类可读的格式)。
我已经探索过诸如 openssl 之类的选项,但我无法控制输出的长度。
有人可以建议吗?
echo "abcdefghijklmnop" | gpg --armor -c --output -
但是,这不会分解为 16 个字符的限制。
结果输出:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.10 (GNU/Linux)
jA0EAwMCnM6hI0xpVVFgyScCfr6Zo2fZeuiVWteZKeptcvSBj9wxk2gRMqTERtz9
8dNUHZq2eRA=
=Jpku
-----END PGP MESSAGE-----
我不知道这将在哪里使用以及您的安全要求的详细信息是什么,因此我将根据您提供的信息进行回答。您需要:
如果您放弃其中任何一项要求,这很容易。如果不是,这很难——如果不是不可能使用标准 Linux/Unix 工具的话。标准块密码将以块为单位对数据进行编码,因此它们确实具有相同的输入和输出大小——但它们将位序列转换为位序列,并且不能保证输出是“可读的”。然后,您可以使用 HEX(base16)或 base64 对输出进行编码,但这会扩展它(这就是 UtahJarhead 的意思,即“不会超出 N 个字符的限制”)。
可能的解决方案(每个都打破一个要求)是:
最后一点:加密方案很难设计和实施,涉及的细节太多,因此根本不建议创建临时加密方法......
编辑:正如对另一个答案的评论中提到的,您可以实现一次性键盘,但是您需要与文本一样长的密码,并且需要选择密码的每个字符并在字母表上均匀分布. 散列密码、编码为 ascii 并获取前 n 个字符可能就足够了 [1]。
无论如何,请记住明文太短并且可以“测试”(例如网站或加密文档的密码),对手可以进行详尽的搜索。
[1] 一些密码学家不同意您可以将哈希函数的输出视为“随机”(您将使用“随机 Oracle 模型”)。哈希的编码必须是这样的,给定输入中比特的均匀分布,作为输出的字母的均匀分布。当你把这个“pad”和消息结合起来的时候,一定是一对一的映射,所以最终输出的分布是均匀的。