2015-08-25 109 views
0

我想使用public.key使用openssl加密參數,並使用linux命令行使用private.key進行解密。但要求是加密後的輸出應該只在一行,以便我可以將其傳輸或發送到其他服務器。文件創建作爲輸出不是必需的。使用openssl加密參數

我見過rsautl,但它給出了一個文件或十六進制轉儲輸出,這是不可能在我的情況下,因爲我需要在一行輸出。請提供必要的幫助。

回答

1

pkeyutl只有在您要求的情況下才會將其輸出發送到文件。如果您未指定輸出文件(使用-out選項),則會將其輸出發送到標準輸出。但由於它是二進制的,所以不能輕易操縱它,而且,可能是輸出流中存在行尾。

爲了解決這個問題,你可以輸出pkeyutlbase64。如果你的版本base64包裝它的輸出,你必須連接才能在一行上得到結果。某些版本(例如GNU coreutils 8.10)具有-w0選項,可防止包裝並生成單行輸出(不包含行尾)。與1.0.2aopenssl版本示例:

echo "foo" | openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0 

其中bob_id_rsa.pubopenssl格式Bob的公鑰。您可以使用以下解密:

base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa 

其中bob_id_rsa是bob的私鑰。完整的例子與加密後解密:

bar=$(echo foo | openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0) 
cue=$(echo $bar | base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa) 
echo $cue 
foo 
+0

感謝它的工作正常。我也能解密。你能指導我如何使用公鑰加密和私鑰解密如果我使用上述命令? – vKohli

+0

當然。你將需要'openssl'格式的公鑰(在我的答案中爲'bob_id_rsa.pub')。如果你有一個SSH私鑰,你可以使用'openssl rsa -in bob_id_rsa -pubout -out bob_id_rsa.pub'方便地從'openssl'格式中提取公鑰。然後,您使用以下方法進行加密:'openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0「,並用」base64 -d |「解密openssl pkeyutl -decrypt -inkey bob_id_rsa'。完整的例子:'echo「foo」| openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0 | base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa'。 –

+0

感謝它的工作。 – vKohli