Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux中的字符串加密_Linux_Encryption_Cryptography - Fatal编程技术网

Linux中的字符串加密

Linux中的字符串加密,linux,encryption,cryptography,Linux,Encryption,Cryptography,请告诉我如何使用命令行工具接收16个字符的字符串并生成16个字符的加密字符串(人类可读格式) 我已经探索过像openssl这样的选项,但我无法控制输出的长度 谁能给点建议吗 在Linux中有ROT13的描述。我没有测试它: $alias rot13=“tr'[A-Za-z]'[N-Za-Mn-Za-m]'” 这可能会满足你的需求,尽管它一点也不安全 echo "abcdefghijklmnop" | gpg --armor -c --output - 但是,这不会突破16个字符的限制 结果输出

请告诉我如何使用命令行工具接收16个字符的字符串并生成16个字符的加密字符串(人类可读格式)

我已经探索过像openssl这样的选项,但我无法控制输出的长度


谁能给点建议吗

在Linux中有ROT13的描述。我没有测试它:

$alias rot13=“tr'[A-Za-z]'[N-Za-Mn-Za-m]'”

这可能会满足你的需求,尽管它一点也不安全

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工具。标准的块密码将数据编码成块,因此它们的输入和输出大小相同——但是它们将位序列转换为位序列,并且不能保证输出是“可读的”。然后,您可以用十六进制(base16)或base64编码输出,但这将扩展它(这就是UtahJarhead所说的“不会将doen打断为N个字符的限制”)

可能的解决方案(每一个都违反一项要求)是:

  • 使用弱加密(类似ROT13的替代密码——或者,如果您想要更复杂的东西,实现,但您必须对其进行编码——或者信任其他人的实现)
  • 使用AES或其他一些好的分组密码(如您所述,通过OpenSSL)进行加密,然后在输出上运行base64
  • 使用AES或其他好的分组密码(通过OpenSSL)进行加密,但不要期望任何人读取输出
最后一点:加密方案很难设计和实现,涉及的细节太多,因此根本不建议创建特别的加密方法

编辑:如对另一个答案的评论中所述,您可以实现一次性pad,但您需要与文本一样长的paswords,并且密码的每个字符都需要在字母表上均匀分布。对密码进行散列、编码为ascii并使用前n个字符可能就足够了[1]

无论如何,请记住,明文太短,可以进行“测试”(如站点密码或加密文档),对手可以进行彻底搜索


[P>(1)一些密码学家不会同意,你可以把哈希函数的输出看作“随机”(你会使用“随机预言模型”)。散列的编码必须确保,给定输入中位的均匀分布,输出中字母的均匀分布。当您将此“pad”与消息组合时,它必须是一对一的映射,因此最终输出的分布是均匀的。

它必须有多强?如果你不需要军事级别的加密,那么一个简单的替换密码(由密钥修改)可能会起作用,并且很容易自己实现。谢谢Jim,但是我可以使用任何命令行工具来实现这一点。它不需要非常强的加密。使用超级棒的ROT26工具“cat”。标记为脱离主题:不是编程问题-我想知道使用命令行工具是否可以实现这一点。首先,您必须指定字符编码和范围,以查看它是否可以回答……您可能会发现ROT13内置在某个地方。要想获得更强大的功能,请使用Vigenère。仔细想想,我不相信有任何真正的“加密”可以保证为您提供确切数量的字符作为输出,而您将其作为输入。有一些模糊技术可以确定(如上面提到的rot13),但没有真正的加密。使用相同大小的一次性焊盘,您始终可以生成
strong
加密(not
true
encryption-rot13绝对正确,但一点也不强)。是的,但是一次性pad需要一个与文本一样长的密码,密码必须随机生成(每个字符的分布是一致的)。如果你实现Vigenere,你也可以实现一些转子机器,比如enigma。这也将提供相同的输出大小。有一些enigma实现可用,但它们不是默认安装的。是的,很好!Enigma也很好——但与一个好的现代分组密码不同。。。