2013-06-14 7 views
13

मैं इस संक्षिप्त को यथासंभव संभव बनाने की कोशिश करूंगा।ओपनएसएसएल स्ट्रिंग डिक्रिप्शन समस्या

मैं & ओपनएसएसएल का उपयोग करके सरल तारों को डीक्रिप्ट करने में सक्षम होना चाहता हूं, जो मैंने पहले किया है।

हालांकि, निम्नलिखित शर्तें पूरी होनी चाहिए:

  • सरल पदबंध उपयोग (कोई कुंजी)
  • कोई इनपुट/आउटपुट फ़ाइलों
  • पदबंध के लिए कोई शीघ्र (के लिए आदेश-पंक्ति विकल्पों के माध्यम से निर्दिष्ट या तो दिशा)

मैं वहां 50% हूं। मैं सफलतापूर्वक के माध्यम से एन्क्रिप्शन कर सकते हैं:

echo 'someTextIWantToEncrypt' | openssl enc -e -aes-256-cbc -nosalt -pass pass:mySecretPass 

उत्पादन परिणाम है:

(??b}n??v???>??G??.?B??~? 

ठीक है, महान। अब मैं उस स्ट्रिंग को डिस्प्ले करना चाहता हूं। तो मुझे क्या करना:

echo -n '(??b}n??v???>??G??.?B??~?' | openssl enc -d -aes-256-cbc -pass pass:mySecretPass 

या यहां तक ​​कि एक विकल्प के रूप:

openssl enc -d -aes-256-cbc -pass pass:mySecretPass <<< '(??b}n??v???>??G??.?B??~?' 

लेकिन मैं इस प्रतिक्रिया मिल:

bad magic number 

हालांकि मैं इनपुट/आउटपुट फ़ाइलों का उपयोग नहीं करना चाहते हैं, वह विधि 100% काम करती है:

# encrypt to file 
echo -n 'someTextIWantToEncrypt' | openssl enc -e -nosalt -out test.txt -aes-256-cbc -pass pass:mySecretPass 

# decrypt from file 
openssl enc -d -nosalt -in test.txt -aes-256-cbc -pass pass:mySecretPass 

# result of decryption (is successful): 
someTextIWantToEncrypt 

तो ... इनपुट/आउटपुट फाइलों का उपयोग करके के बिना उपरोक्त डिक्रिप्शन प्रक्रिया को मैं कैसे प्राप्त कर सकता हूं? मुझे लगता है कि मैं करीब हूं, लेकिन कुछ छोटी जानकारी खो रहा हूं।

अग्रिम धन्यवाद।

उत्तर

24

समस्या यह है कि एन्क्रिप्शन असीमित पात्रों सहित पूरे ASCII चरित्र सेट का उपयोग करता है। यदि आप एन्क्रिप्टेड डेटा को काट और पेस्ट करने में सक्षम होना चाहते हैं, तो आपको इसे केवल प्रिंट करने योग्य वर्णों में परिवर्तित करने की आवश्यकता है।

echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \ 
    openssl enc -base64 -d -aes-256-cbc -nosalt -pass pass:mySecretPass 

चेतावनी:: आप openssl उपयोग कर रहे हैं, मैं केवल यह मान सकते हैं

echo 'someTextIWantToEncrypt' | \ 
    openssl enc -base64 -e -aes-256-cbc -nosalt -pass pass:mySecretPass 

KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU= 

तो यह उसी तरह डिक्रिप्ट: आप -base64 (या -a) के विकल्प के साथ ऐसा कर सकते हैं डेटा की गोपनीयता, और इसलिए पासवर्ड, आपके लिए महत्वपूर्ण है। यदि ऐसा है, तो आपको कमांड लाइन, पर कभी भी पासवर्ड नहीं देना चाहिए क्योंकि इसे ps चलाने के विशेषाधिकार वाले किसी के भी संपर्क में लाया जा सकता है।

एक बेहतर समाधान के लिए एक वातावरण चर में पासवर्ड की दुकान और है openssl वहाँ से पढ़ें:

export passwd="mySecretPass" 
echo "KPkBkGJ9bs4YHvh24xz7m9jTlYWm1LcIFcWR0DwY4PU=" | \ 
    openssl enc -base64 -d -aes-256-cbc -nosalt -pass env:passwd 
+0

आप सही हैं, और मैं इस पता लगा है - आप के रूप में अच्छी सही हैं व्यक्ति के रूप में जिसने मेरी मदद की। प्रॉप्स आप दोनों के पास जाते हैं।चूंकि मैं इस साइट पर इतना नया हूं, इसलिए यह मुझे कुछ और घंटों के लिए अपने प्रश्न का उत्तर नहीं देगा। किसी भी मामले में, धन्यवाद! –

+2

और एक तरफ के रूप में, आप "बेहतर" समाधान के बारे में भी सही हैं। मैं बस इतना कह सकता हूं कि यह एक कामकाजी सबूत ऑफ कॉन्सेप्ट है, और आपकी टिप्पणी के पूरक के लिए, अंतिम लक्ष्य ऐसी जानकारी का अधिक सुरक्षित "भंडारण" करना है और इसे कमांड लाइन पर बेनकाब नहीं करना है। आप के लिए Kudos एडम लिस। –

+0

उस स्थिति में, मैं सम्मानपूर्वक सुझाव देता हूं कि आप एक सुरक्षा पेशेवर द्वारा समीक्षा की मांग करें। आप व्यवसाय में 15+ वर्षों के दौरान बहुत सारे व्यावहारिक - लेकिन पूरी तरह से कमजोर - कार्यान्वयन देखते हैं। –

संबंधित मुद्दे