請問我可以如何取16個字符的字符串,並使用命令行工具生成16個字符的加密字符串(以可讀格式)。Linux中的字符串加密
我已經探索過像openssl這樣的選項,但我無法控制輸出的長度。
任何人都可以請指教?
請問我可以如何取16個字符的字符串,並使用命令行工具生成16個字符的加密字符串(以可讀格式)。Linux中的字符串加密
我已經探索過像openssl這樣的選項,但我無法控制輸出的長度。
任何人都可以請指教?
echo "abcdefghijklmnop" | gpg --armor -c --output -
但是,這不會分解成您的16個字符的限制。
結果輸出:
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.10 (GNU/Linux)
jA0EAwMCnM6hI0xpVVFgyScCfr6Zo2fZeuiVWteZKeptcvSBj9wxk2gRMqTERtz9
8dNUHZq2eRA=
=Jpku
-----END PGP MESSAGE-----
關於它的思考,我不相信有任何真正的'加密',可以保證給你輸入的字符的確切數量。有一些混淆技術是可以肯定的(如上面提到的rot13),但沒有真正的加密。 – UtahJarhead 2012-04-12 12:25:32
使用相同大小的一次性打印墊,您始終可以生成「強大」加密(不是「真實」加密 - rot13絕對是真實的,但並不強大)。 – 2012-04-12 16:24:47
是的,但只要文本和密碼必須隨機生成(每個字符均勻分佈),一次性密碼將需要密碼。 – Jay 2012-04-12 17:14:06
我不知道這將是使用的什麼是您的安全要求的細節,所以我會回答根據您所提供的信息。您需要:
如果你放棄這些要求中的任何一個,那很容易。如果不是這樣,使用標準Linux/Unix工具即使不是不可能的話,也很難。標準分組密碼將以塊的形式對數據進行編碼,因此它們的輸入和輸出大小相同 - 但它們將比特序列轉換爲比特序列,並且不能保證輸出將是「可讀的」。然後,您可以用十六進制(base16)或base64編碼輸出,但這會擴展它(這就是UtahJarhead所指的「不會破壞N字符限制」)。
可能的解決方案(每一個突破要求)是:
最後一點:加密方案是硬的東西,制定和實施,並有涉及太多的玄機,所以創建一個特設的加密方法是不建議在所有...
編輯:正如對另一個答案的評論中所述,您可以實現一次性填充,但只要文本和密碼的每個字符需要均勻分佈,您就需要使用paswords在字母表上。散列密碼,編碼爲ascii並取前n個字符爲,大概夠好[1]。
無論如何,記住明文太短和它可以被「測試」(如密碼到網站或加密文件),敵手可以做一個詳盡的搜索。
[1]一些密碼學家不會同意您可以將散列函數的輸出視爲「隨機」(您將使用「隨機Oracle模型」)。散列的編碼必須是這樣的:給定輸入中的比特的均勻分佈,存在均勻分佈的字母作爲輸出。當你將這個「pad」與消息結合起來時,它必須是一對一的映射,所以最終輸出的分佈是一致的。
如果你實施Vigenere,你也可以實施一些轉子機器,例如謎。這也會給出相同的輸出尺寸。有可用的謎題實現,但它們不作爲默認安裝。 – 2012-04-12 16:42:48
是的,好點!謎也很好 - 但與現代分組密碼不太一樣。 – Jay 2012-04-12 17:12:11
它有多強?如果你不需要軍事級的加密,那麼一個簡單的替代密碼(由一個密鑰修改)可能會起作用,並且很容易實現。 – 2012-04-12 06:20:29
感謝Jim,但是有沒有我可以用來完成這件事的命令行工具。它不一定非常強大的加密。 – 2012-04-12 06:26:48
使用稱爲「貓」的超棒的ROT26工具。 – 2012-04-12 06:35:29