2012-04-12 60 views
3

請問我可以如何取16個字符的字符串,並使用命令行工具生成16個字符的加密字符串(以可讀格式)。Linux中的字符串加密

我已經探索過像openssl這樣的選項,但我無法控制輸出的長度。

任何人都可以請指教?

+2

它有多強?如果你不需要軍事級的加密,那麼一個簡單的替代密碼(由一個密鑰修改)可能會起作用,並且很容易實現。 – 2012-04-12 06:20:29

+0

感謝Jim,但是有沒有我可以用來完成這件事的命令行工具。它不一定非常強大的加密。 – 2012-04-12 06:26:48

+2

使用稱爲「貓」的超棒的ROT26工具。 – 2012-04-12 06:35:29

回答

3

在Linux中有對ROT13的描述here。我沒有測試它:

$alias rot13="tr '[A-Za-z]' '[N-ZA-Mn-za-m]'"

這可能滿足您的需求,但它是不是在所有的安全。

2
echo "abcdefghijklmnop" | gpg --armor -c --output - 

但是,這不會分解成您的16個字符的限制。

結果輸出:

-----BEGIN PGP MESSAGE----- 
Version: GnuPG v1.4.10 (GNU/Linux) 

jA0EAwMCnM6hI0xpVVFgyScCfr6Zo2fZeuiVWteZKeptcvSBj9wxk2gRMqTERtz9 
8dNUHZq2eRA= 
=Jpku 
-----END PGP MESSAGE----- 
+2

關於它的思考,我不相信有任何真正的'加密',可以保證給你輸入的字符的確切數量。有一些混淆技術是可以肯定的(如上面提到的rot13),但沒有真正的加密。 – UtahJarhead 2012-04-12 12:25:32

+1

使用相同大小的一次性打印墊,您始終可以生成「強大」加密(不是「真實」加密 - rot13絕對是真實的,但並不強大)。 – 2012-04-12 16:24:47

+0

是的,但只要文本和密碼必須隨機生成(每個字符均勻分佈),一次性密碼將需要密碼。 – Jay 2012-04-12 17:14:06

0

我不知道這將是使用的什麼是您的安全要求的細節,所以我會回答根據您所提供的信息。您需要:

  • 強加密;
  • 輸出必須是相同大小的輸入;
  • 輸出必須是人類可讀的。

如果你放棄這些要求中的任何一個,那很容易。如果不是這樣,使用標準Linux/Unix工具即使不是不可能的話,也很難。標準分組密碼將以塊的形式對數據進行編碼,因此它們的輸入和輸出大小相同 - 但它們將比特序列轉換爲比特序列,並且不能保證輸出將是「可讀的」。然後,您可以用十六進制(base16)或base64編碼輸出,但這會擴展它(這就是UtahJarhead所指的「不會破壞N字符限制」)。

可能的解決方案(每一個突破要求)是:

  • 使用弱密碼(替代密碼像ROT13 - 或者,如果你想要的東西多一點複雜,執行Vigenère cipher,但你必須編碼 - 或者相信別人的實現);
  • 使用AES或其他一些好的分組密碼(通過OpenSSL,如您所述)進行加密,然後在輸出上運行base64;
  • 使用AES或其他好的分組密碼(通過OpenSSL)進行加密,但不要期望任何人讀取輸出。

最後一點:加密方案是硬的東西,制定和實施,並有涉及太多的玄機,所以創建一個特設的加密方法是不建議在所有...

編輯:正如對另一個答案的評論中所述,您可以實現一次性填充,但只要文本和密碼的每個字符需要均勻分佈,您就需要使用paswords在字母表上。散列密碼,編碼爲ascii並取前n個字符爲,大概夠好[1]。

無論如何,記住明文太短它可以被「測試」(如密碼到網站或加密文件),敵手可以做一個詳盡的搜索。

[1]一些密碼學家不會同意您可以將散列函數的輸出視爲「隨機」(您將使用「隨機Oracle模型」)。散列的編碼必須是這樣的:給定輸入中的比特的均勻分佈,存在均勻分佈的字母作爲輸出。當你將這個「pad」與消息結合起來時,它必須是一對一的映射,所以最終輸出的分佈是一致的。

+1

如果你實施Vigenere,你也可以實施一些轉子機器,例如謎。這也會給出相同的輸出尺寸。有可用的謎題實現,但它們不作爲默認安裝。 – 2012-04-12 16:42:48

+0

是的,好點!謎也很好 - 但與現代分組密碼不太一樣。 – Jay 2012-04-12 17:12:11