2010-09-28 27 views
25

के साथ अजगर में सरल एन्क्रिप्ट/डिक्रिप्ट lib एक कुंजी के साथ स्ट्रिंग को एन्क्रिप्ट/डिक्रिप्ट करने का एक आसान तरीका है।निजी कुंजी

somthing की तरह:

key = '1234' 
string = 'hello world' 
encrypted_string = encrypt(key, string) 
decrypt(key, encrypted_string) 

मैं कुछ भी है कि ऐसा करने के लिए सरल नहीं पा सके।

+0

क्या आप पहले से ही * आरएसए * और * पायथन * के लिए googled है? –

उत्तर

23

http://www.dlitz.net/software/pycrypto/ आपको जो चाहिए वो करना चाहिए।

अपने दस्तावेज़ पृष्ठ से लिया गया।

>>> from Crypto.Cipher import DES 
>>> obj=DES.new('abcdefgh', DES.MODE_ECB) 
>>> plain="Guido van Rossum is a space alien." 
>>> len(plain) 
34 
>>> obj.encrypt(plain) 
Traceback (innermost last): 
    File "<stdin>", line 1, in ? 
ValueError: Strings for DES must be a multiple of 8 in length 
>>> ciph=obj.encrypt(plain+'XXXXXX') 
>>> ciph 
'\021,\343Nq\214DY\337T\342pA\372\255\311s\210\363,\300j\330\250\312\347\342I\3215w\03561\303dgb/\006' 
>>> obj.decrypt(ciph) 
'Guido van Rossum is a space alien.XXXXXX' 
21

pyDES एक डेस और ट्रिपल-डेस कार्यान्वयन पूरी तरह से अजगर में लिखा है।

यहां एक सरल और पोर्टेबल उदाहरण है जो मूल स्ट्रिंग एन्क्रिप्शन आवश्यकताओं के लिए पर्याप्त सुरक्षित होना चाहिए। बस अपने कार्यक्रम को उसी फ़ोल्डर में pyDES मॉड्यूल रख दिया और इसे आज़माने:

भेजने वाले के कंप्यूटर

>>> from pyDES import * # pyDes if installed from pip 
>>> ciphertext = triple_des('a 16 or 24 byte password').encrypt("secret message", padmode=2) #plain-text usually needs padding, but padmode = 2 handles that automatically 
>>> ciphertext 
')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2' #gibberish 

प्राप्तकर्ता का कंप्यूटर

>>> from pyDES import * 
>>> plain_text = triple_des('a 16 or 24 byte password').decrypt(')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2', padmode=2) 
>>> plain_text 
"secret message" 
+1

आपको धन्यवाद! मैं एक शुद्ध पायथन एन्क्रिप्शन/डिक्रिप्शन योजना की तलाश में हूं (इसलिए यह वास्तव में पोर्टेबल है), और यह एकमात्र ऐसा है जिसे मैंने भर दिया है। – leetNightshade

10

अजगर 2 के लिए, आप का उपयोग करना चाहिए keyczar http://www.keyczar.org/

पायथन 3 के लिए, जब तक कीकजर नहीं है उपलब्ध है, मैंने सरल-क्रिप्ट लिखा है http://pypi.python.org/pypi/simple-crypt

मैं इस दो साल के उत्तर दे रहा हूं क्योंकि प्रश्न पूछे जाने के बाद चीजें बदल गई हैं।

ध्यान दें कि इस प्रश्न के पिछले उत्तर कमजोर सिफर (आज के मानकों के अनुसार) का उपयोग करते हैं और इसमें कोई महत्वपूर्ण मजबूती नहीं है। यहां दो सिफारिशें अधिक सुरक्षित हैं।

+0

यदि KeyCzar.org रीडायरेक्ट नहीं करता है, क्योंकि यह अगस्त में मेरे लिए नहीं था, तो इसका सीधा यूआरएल https: // github है।कॉम/google/keyczar – AnneTheAgile

1

प्रीहायर्ड कुंजी के साथ लघु पाठ खंड को एन्क्रिप्ट करने का सबसे सरल और तेज़ तरीका क्रिप्टोश फ़ंक्शन (एमडी 5, शा आदि) में से एक का उपयोग करना है।

i.e. calc md5 आपकी कुंजी के बाद, तो इस एमडी 5 हैश के साथ अपने स्ट्रिंग खंड को xor करें। यदि आपको md5 की लंबाई से अधिक लंबे समय तक पाठ fragmen एन्कोड करने की आवश्यकता है - md5 (md5 हैश) करें और अगले खंड को एन्क्रिप्ट करें।

इस समाधान की सुरक्षा 3-डीईएस से भी बदतर है लेकिन औसत मामले में पर्याप्त है (यानि कॉन्फ़िगरेशन फ़ाइल में बहुत सुरक्षित पासवर्ड स्टोर करने के लिए) और इसे बेस पायथन डिस्ट्रो के अलावा कुछ भी आवश्यकता नहीं है।

यदि आपको बेहतर सुरक्षा की आवश्यकता है - एईएस, ब्लोफिश आदि कार्यान्वयन में से एक की तलाश करें, लेकिन वास्तव में एईएस को लाभ पहुंचाने के लिए आपको अपने डेटा को यादृच्छिक लोगों के साथ मिश्रित करने के लिए कुछ अतिरिक्त कार्य करने की आवश्यकता है।

1

dsamersoff के उत्तर पर विस्तार करने के लिए .. यह सरल और असुरक्षित है, लेकिन कुछ कार्यों के लिए उपयोगी हो सकता है। यहां कुछ कोड है:

import crypt 
import getpass 
import os.path 

def auth_func(): 
    return (raw_input('Username:'), getpass.getpass('Password:')) 

def xor(a,b): 
    assert len(b) >= len(a) 
    return "".join([chr(ord(a[i])^ord(b[i])) for i in range(len(a))]) 

# create a new credentials file if needed 
if not os.path.exists('cred'): 
    with open('cred', 'w') as f: 
     user, pwd = auth_func() 
     f.write ("{}\n".format(user))    
     f.write ("{}\n".format(xor(pwd, crypt.crypt('secret', 'words')))) 
     f.close() 

# read credentials and print user/password 
with open('cred', 'r') as f: 
    user, pwd = f.read().split('\n')[:2] 
    print user 
    print xor(pwd, crypt.crypt('secret', 'words')) 
संबंधित मुद्दे