任何请告诉我如何可以采取16个字符的string,并使用命令行工具生成16个字符的encryptionstring(以可读格式)。
我已经探索过像openssl这样的选项,但我无法控制输出的长度。
任何人都可以请指教?
在Linux / POSIX中,什么是Windows'rand_s的最佳替代品?
CryptEncrypt不会encryption整个文本
用于Xamarin Forms项目的UWP中的AESencryption
创buildCNG密钥的权限
什么是使用用户提供的密码encryption和解密string的简单方法,在本机Win32和.NET中都可以使用?
将一个X509 PEM文件加载到Windows CryptoApi中
CryptoAPI / WinCrypt:如何在C ++中导入PEM文件中的私钥?
在Windows上访问智能卡时重用Java Keystore
这里有一个在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所说的“不会破坏你的N个字符限制”)。
使用弱加密(像ROT13这样的替换密码 – 或者,如果你想要更复杂一点的话,可以实现Vigenère密码 ,但是你必须编码 – 或者相信别人的实现)。
使用AES或其他一些好的分组密码(通过OpenSSL,如您所述)加密,然后在输出上运行base64;
使用AES或其他一些好的块密码(通过OpenSSL)加密,但不要指望任何人读取输出。
最后一点:加密方案是难以设计和实现的,并且涉及太多的细微之处,所以不建议创建临时加密方法。
编辑 :正如在另一个答案的评论中提到的那样,你可以实现一次性填充,但是只要文本和密码的每个字符需要在字母表上均匀分布就可以选择。 散列密码,编码为ascii,并采取前n个字符可能是足够的[1]。
无论如何,记住明文太短,可以“测试”(如密码到网站或加密文件),对手可以做一个详尽的搜索。
[1]一些密码学家不会同意你可以把散列函数的输出视为“随机”(你会使用“随机Oracle模型”)。 散列的编码必须是这样的:给定输入中的比特的均匀分布,存在均匀分布的字母作为输出。 当你把这个“pad”和消息结合起来的时候,它必须是一对一映射,所以最终输出的分布是一致的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。