एक पाइथन स्क्रिप्ट में पासवर्ड छिपाना (केवल असुरक्षित शौच)


127

मुझे एक पायथन स्क्रिप्ट मिली है जो ODBC कनेक्शन बना रही है। ODBC कनेक्शन कनेक्शन स्ट्रिंग के साथ उत्पन्न होता है। इस कनेक्शन स्ट्रिंग में मुझे इस कनेक्शन के लिए उपयोगकर्ता नाम और पासवर्ड शामिल करना होगा।

क्या फ़ाइल में इस पासवर्ड को अस्पष्ट करने का एक आसान तरीका है (बस जब मैं फ़ाइल संपादित कर रहा हूं तो कोई भी पासवर्ड नहीं पढ़ सकता है)?


16
बस याद रखें कि इस फ़ाइल को चलाने वाले उपयोगकर्ताओं के पास कम से कम इस तक पहुंच होगी और वे आसानी से पासवर्ड पकड़ सकते हैं। यदि थिन्स केवल आपके द्वारा पढ़ा जा सकता है और आप लोगों को इस बारे में चिंतित हैं कि इसे देखने के लिए आपके कंधे से अधिक इसके लिए जाएं, लेकिन चेतावनी दी जाए, जबकि औसत पर्यवेक्षक किसी पासवर्ड को हथियाने के लिए तेजी से चीजों को याद नहीं कर सकता है, स्क्रिप्ट और एक्सेस के साथ कोई भी। थोड़ी-सी तकनीकी जानकारी और थोड़ी मात्रा में महत्वाकांक्षा आपके पासवर्ड को हड़पने में सक्षम होगी। हमेशा सुरक्षा को बहुत सावधानी से सोचें, यह महत्वपूर्ण है।
Youarefunny

जवाबों:


117

Base64 एन्कोडिंग मानक पुस्तकालय में है और कंधे सर्फर को रोकने के लिए करेगा:

>>> import base64
>>>  print(base64.b64encode("password".encode("utf-8")))
cGFzc3dvcmQ=
>>> print(base64.b64decode("cGFzc3dvcmQ=").decode("utf-8"))
password

5
मैं सहमत हूँ। Base64 एन्कोडेड पासवर्ड बहुत अधिक रहस्यमय लगता है।
एड हैबर

4
लेकिन इस तथ्य की मदद नहीं करता है कि स्क्रिप्ट को उपयोगकर्ता द्वारा इसे चलाने के लिए पठनीय होना चाहिए और पासवर्ड नहीं होना चाहिए।
मार्टिन बेकेट

79
मुझे नहीं लगता कि इस संदर्भ में इससे base64बेहतर कोई बात नहीं है rot13। इसके विपरीत, base64इसकी विशिष्ट विशेषताएं (समान संकेत, ...) है और इस प्रकार अन्य दृष्टिकोणों की तुलना में आसान पता लगाने योग्य है। हालांकि किसी भी तरह के आक्षेप का कोई व्यावहारिक लाभ नहीं है। वास्तव में बुरा है कि यह जवाब यह उच्च श्रेणी निर्धारण किया गया है। यह सिर्फ सुरक्षा का झूठा एहसास देता है ...
schlamar

12
यदि आप पासवर्ड रिकॉर्ड कर रहे हैं ताकि इसका उपयोग स्क्रिप्ट द्वारा किया जा सके, तो स्क्रिप्ट तक पहुंच रखने वाला कोई भी व्यक्ति पासवर्ड प्राप्त करने में सक्षम होगा, इससे कोई फर्क नहीं पड़ता कि आप किस एन्क्रिप्शन विधि का उपयोग करते हैं। यहाँ आवश्यकता केवल किसी के पासवर्ड को छुपाने की थी जब वह खुला था, केवल स्क्रिप्ट देख रहा था। इस मामले में base64यह बेहतर है rot13क्योंकि यह पायथन मानक पुस्तकालय में है।
डेव वेब

17
base64 एन्क्रिप्शन नहीं है। यह सबसे अच्छा है।
18

52

डगलस एफ शियरर यूनिक्स में आम तौर पर स्वीकृत समाधान है जब आपको दूरस्थ लॉगिन के लिए पासवर्ड निर्दिष्ट करने की आवश्यकता होती है।
आप पथ निर्दिष्ट करने के लिए एक --पासवर्ड-से-फ़ाइल विकल्प जोड़ते हैं और एक फ़ाइल से प्लेनटेक्स्ट पढ़ते हैं।
फ़ाइल तब ऑपरेटिंग सिस्टम द्वारा संरक्षित उपयोगकर्ता के अपने क्षेत्र में हो सकती है। यह विभिन्न उपयोगकर्ताओं को स्वचालित रूप से अपनी खुद की फ़ाइल लेने की अनुमति देता है।

पासवर्ड के लिए जिसे स्क्रिप्ट के उपयोगकर्ता को जानने की अनुमति नहीं है - आप स्क्रिप्ट को उत्कीर्ण अनुमति से चला सकते हैं और उस रूट / व्यवस्थापक उपयोगकर्ता के पास पासवर्ड फ़ाइल होनी चाहिए।


1
बिना रूट या एडमिन पासवर्ड दिए आप एलिवेटेड परमिशन से स्क्रिप्ट को कैसे चलाते हैं? क्या यह UID बिट्स से संबंधित है?
Youarefunny

4
कोई बात नहीं, मैंने इसका हल निकाल लिया। किसी और के लिए जो परवाह करता है: यदि किसी स्क्रिप्ट में एक सेट बिट बिट सेट है, तो OS दुभाषिया के लिए सेट बिट को 'पास' कर देगा । दुर्भाग्य से, बड़े पैमाने पर गैपिंग सुरक्षा छेद हैं, इसलिए अधिकांश आधुनिक डिस्ट्रोस स्क्रिप्ट के लिए सेट्युइड बंद कर देते हैं।
Youarefunny

मुझे -पासवर्ड-से-फ़ाइल विकल्प पर कोई जानकारी नहीं मिल सकती है। क्या आपके पास कोई उदाहरण है? धन्यवाद!
पिरामिड 12

@ पिरामिड - मेरा मतलब था कि आप इस तरह की एक विशेषता को कोड करेंगे और एक फ़ाइल से एक पासवार्ड पढ़ने की क्षमता जोड़ेंगे
मार्टिन बेकेट

@MartinBeckett की तरह, लेकिन Youarefunny ने कहा, आपको पासवर्ड फ़ाइल पर स्क्रिप्ट रूट एक्सेस देने के लिए अजगर पर सेतुबंध स्थापित करना होगा?
पिरामिड

51

यहाँ एक सरल विधि है:

  1. एक अजगर मॉड्यूल बनाएं - चलो इसे पीकब्यूहोमॉक कहते हैं।
  2. Picaboo.py में, पासवर्ड और उस पासवर्ड की आवश्यकता वाले किसी भी कोड को शामिल करें
  3. इस मॉड्यूल (अजगर कमांडलाइन, आदि ...) को आयात करके - संकलित संस्करण - picaboo.pyc बनाएं।
  4. अब, picaboo.py हटाएं।
  5. अब आप केवल picaboo.pyc पर निर्भर करते हुए ख़ुशी से पीसाबू आयात कर सकते हैं। चूंकि picaboo.pyc बाइट संकलित है इसलिए यह आकस्मिक उपयोगकर्ता के लिए पठनीय नहीं है।

यह बेस 64 डिकोडिंग की तुलना में थोड़ा अधिक सुरक्षित होना चाहिए - हालांकि यह एक py_to_pyc डिकंपाइलर के लिए असुरक्षित है।


2
इसमें अभी भी कुछ कमियां हैं, लेकिन यह वास्तव में बहुत करीब है जो मुझे चाहिए। यह मुझे पासवर्ड स्क्रिप्ट को प्रकट किए बिना उपयोगकर्ता / पासवार्ड कनेक्शनों को शामिल करने, या कमांड प्रॉम्प्ट में टाइप करने के लिए अजगर स्क्रिप्ट्स को डेमो करने की अनुमति देगा। पिकाबू import peekaboको आयात करने के बाद पासवर्ड peekaboo.password(यदि password='secret'
पिकाबू के थ्रू

8
यदि आप इस विचार को एक कदम आगे ले जाना चाहते हैं, तो आप किसी भी .py फ़ाइल को C में संकलित करने के लिए Cython का उपयोग कर सकते हैं और एक प्लेटफ़ॉर्म विशिष्ट बाइनरी उत्पन्न कर सकते हैं (उदा: विंडोज़ के लिए .so, macOS के लिए। etc) ... cythonizingआपकी स्क्रिप्ट द्वारा। और जनरेट किए गए बाइनरी को साझा करने से आपको इस उत्तर का लाभ मिलेगा + आपत्ति की एक और परत जोड़ सकते हैं, क्योंकि अब पासवर्ड प्राप्त करने के लिए आपके पास डिकम्पाइल सी कोड है। यह 100% सुरक्षित नहीं है, लेकिन जिस संवेदनशील डेटा को आप छिपाना चाहते हैं, उसे प्राप्त करने में बहुत अधिक श्रम लगेगा।
Fnord

साइथनिंग, परिपूर्ण
Arno

29

यदि आप एक यूनिक्स प्रणाली पर काम कर रहे हैं, तो मानक पायथन लाइब्रेरी में netrc मॉड्यूल का लाभ उठाएं। यह एक अलग पाठ फ़ाइल (.netrc) से पासवर्ड पढ़ता है, जिसका प्रारूप यहां अस्वीकृत है

यहाँ एक छोटा सा उपयोग उदाहरण दिया गया है:

import netrc

# Define which host in the .netrc file to use
HOST = 'mailcluster.loopia.se'

# Read from the .netrc file in your home directory
secrets = netrc.netrc()
username, account, password = secrets.authenticators( HOST )

print username, password

19

उपयोगकर्ता द्वारा उपयोगकर्ता नाम और पासवर्ड को रनटाइम पर नहीं दिया जा सकता है, इसका सबसे अच्छा समाधान, संभवतः एक अलग स्रोत फ़ाइल है जिसमें उपयोगकर्ता नाम और पासवर्ड के लिए केवल चर आरंभीकरण है जो आपके मुख्य कोड में आयात किया गया है। क्रेडेंशियल बदलने पर इस फ़ाइल को केवल संपादन की आवश्यकता होगी। अन्यथा, यदि आप औसत यादों के साथ केवल कंधे सर्फर्स के बारे में चिंतित हैं, तो बेस 64 एन्कोडिंग शायद सबसे आसान समाधान है। ROT13 मैन्युअल रूप से डिकोड करना बहुत आसान है, मामला संवेदनशील नहीं है और यह एन्क्रिप्टेड स्थिति में बहुत अधिक अर्थ रखता है। अजगर स्क्रिप्ट के बाहर अपना पासवर्ड और यूजर आईडी एनकोड करें। क्या उसने स्क्रिप्ट को उपयोग के लिए रनटाइम पर डिकोड किया है।

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


बहुत अच्छा जवाब - धन्यवाद। मेरे द्वारा लिखी जाने वाली छोटी लिपियों के लिए (जो वैसे भी रखरखाव लिपियाँ हैं - BASE64 एन्कोडिंग पर्याप्त होगी)
बर्नहार्ड्रस

2
यह अच्छा लगता है, लेकिन क्या आप एक उदाहरण लागू कर सकते हैं? अभी यह केवल एक सामान्य अभ्यास का वर्णन है, और किसी के लिए उपयोगी नहीं है, ऐसा पहले नहीं किया है।
दनिद

18

स्क्रिप्ट से बाहरी फ़ाइल में उपयोगकर्ता नाम और पासवर्ड आयात करने के बारे में कैसे? इस तरह भले ही किसी को स्क्रिप्ट पकड़ में आ जाए, लेकिन उन्हें पासवर्ड अपने आप नहीं मिलेगा।


15

Base64 आपकी साधारण जरूरतों के लिए जाने का रास्ता है। कुछ भी आयात करने की आवश्यकता नहीं है:

>>> 'your string'.encode('base64')
'eW91ciBzdHJpbmc=\n'
>>> _.decode('base64')
'your string'

2
क्या वास्तव में मूर्ख है ?! संपूर्ण उत्तर, या आयात नहीं करने वाला हिस्सा?
tzot

18
Base64 केवल सुरक्षा का भ्रम जोड़ता है।
FlySwat

13
जोनाथन, ऐसा लगता है जैसे आपने सवाल नहीं पढ़ा। यह अस्पष्टता (और एक बहुत ही अस्थायी) के बारे में है, सुरक्षा नहीं है , इसलिए मुझे समझ में नहीं आता है कि आप मेरे जवाब को उपयोगी क्यों नहीं मानते हैं।
23

1
मुझे नहीं पता था कि आप बेस 64 मॉड्यूल का उपयोग करने के बजाय ऐसा कर सकते हैं। और बहुत सारे एनकोडिंग भी हैं जैसे ज़ालिब भी ... मज़ा :)
किव जूल 5'09

1
@ डेनिस बेस 64 मॉड्यूल का उपयोग करना आजकल का पसंदीदा तरीका है। बाद के पायथन के नए संस्करणों में अब काम नहीं करता है।
Jeyekomon

5

के लिए python3 कहानियो का उपयोग कर base64अलग ढंग से किया जाता है:

import base64
base64.b64encode(b'PasswordStringAsStreamOfBytes')

जिसके परिणामस्वरूप

b'UGFzc3dvcmRTdHJpbmdBc1N0cmVhbU9mQnl0ZXM='

अनौपचारिक स्ट्रिंग प्रतिनिधित्व पर ध्यान दें, वास्तविक स्ट्रिंग उद्धरणों में है

और वापस मूल स्ट्रिंग को डिकोड कर रहा है

base64.b64decode(b'UGFzc3dvcmRTdHJpbmdBc1N0cmVhbU9mQnl0ZXM=')
b'PasswordStringAsStreamOfBytes'

इस परिणाम का उपयोग करने के लिए जहां स्ट्रिंग ऑब्जेक्ट्स की आवश्यकता होती है बाइट ऑब्जेक्ट का अनुवाद किया जा सकता है

repr = base64.b64decode(b'UGFzc3dvcmRTdHJpbmdBc1N0cmVhbU9mQnl0ZXM=')
secret = repr.decode('utf-8')
print(secret)

python3 बाइट्स कैसे संभालता है (और इसके अनुसार तार) के बारे में अधिक जानकारी के लिए कृपया आधिकारिक दस्तावेज देखें


4

यह एक बहुत ही आम समस्या है। आमतौर पर सबसे अच्छा आप कर सकते हैं या तो है

ए) एनकोड / डीकोड (सिर्फ रोट 13 नहीं) या

बी) पसंदीदा विधि एक एन्क्रिप्शन कुंजी का उपयोग करना है, अपने कार्यक्रम की पहुंच के भीतर, पासवर्ड को एनकोड / डीकोड करें। जिसमें आप कुंजी को एक्सेस करने के लिए फाइल प्रोटेक्शन का उपयोग कर सकते हैं।

उन पंक्तियों के साथ यदि आपका ऐप सेवा / डेमन (एक वेबसर्वर की तरह) के रूप में चलता है, तो आप अपनी कुंजी को पासवर्ड स्टार्टअप के साथ एक पासवर्ड संरक्षित कीस्टोर में डाल सकते हैं जो सेवा स्टार्टअप के हिस्से के रूप में है। यह आपके एप्लिकेशन को पुनः आरंभ करने के लिए एक व्यवस्थापक लेगा, लेकिन आपके कॉन्फ़िगरेशन पासवर्ड के लिए वास्तव में अच्छा दिखावा होगा।


2

आपका ऑपरेटिंग सिस्टम संभवतः सुरक्षित रूप से डेटा एन्क्रिप्ट करने के लिए सुविधाएं प्रदान करता है। उदाहरण के लिए, विंडोज पर DPAPI (डेटा प्रोटेक्शन एपीआई) है। पहली बार जब आप अपने क्रेडेंशियल के लिए उपयोगकर्ता से नहीं पूछते हैं, तो उन्हें बाद के रनों के लिए एन्क्रिप्ट किया गया है?


2

प्रमाणीकरण के लिए प्रमाणीकरण / पासवर्ड / उपयोगकर्ता नाम बदलने के बजाय अधिक होमग्रोन एप्रेच। एफ़टीपीएलआईबी इसका उदाहरण है। " pass.csv " सीएसवी फ़ाइल नाम है

नीचे दिए गए CSV में पासवर्ड सहेजें:

उपयोगकर्ता नाम

उपयोगकर्ता पासवर्ड

(बिना कॉलम हेडिंग के)

CSV को पढ़ना और उसे सूची में सहेजना।

स्वतः विवरण के रूप में सूची चित्रण का उपयोग करना।

पूर्ण कोड।

import os
import ftplib
import csv 
cred_detail = []
os.chdir("Folder where the csv file is stored")
for row in csv.reader(open("pass.csv","rb")):       
        cred_detail.append(row)
ftp = ftplib.FTP('server_name',cred_detail[0][0],cred_detail[1][0])

2

यहाँ ऐसी चीज़ के लिए मेरा स्निपेट है। आप मूल रूप से फ़ंक्शन को अपने कोड में आयात या कॉपी करते हैं। getCredentials एन्क्रिप्टेड फ़ाइल बनाएगा यदि यह मौजूद नहीं है और एक dictionaty को वापस लौटाता है, औरCredential अपडेट करेगा।

import os

def getCredentials():
    import base64

    splitter='<PC+,DFS/-SHQ.R'
    directory='C:\\PCT'

    if not os.path.exists(directory):
        os.makedirs(directory)

    try:
        with open(directory+'\\Credentials.txt', 'r') as file:
            cred = file.read()
            file.close()
    except:
        print('I could not file the credentials file. \nSo I dont keep asking you for your email and password everytime you run me, I will be saving an encrypted file at {}.\n'.format(directory))

        lanid = base64.b64encode(bytes(input('   LanID: '), encoding='utf-8')).decode('utf-8')  
        email = base64.b64encode(bytes(input('   eMail: '), encoding='utf-8')).decode('utf-8')
        password = base64.b64encode(bytes(input('   PassW: '), encoding='utf-8')).decode('utf-8')
        cred = lanid+splitter+email+splitter+password
        with open(directory+'\\Credentials.txt','w+') as file:
            file.write(cred)
            file.close()

    return {'lanid':base64.b64decode(bytes(cred.split(splitter)[0], encoding='utf-8')).decode('utf-8'),
            'email':base64.b64decode(bytes(cred.split(splitter)[1], encoding='utf-8')).decode('utf-8'),
            'password':base64.b64decode(bytes(cred.split(splitter)[2], encoding='utf-8')).decode('utf-8')}

def updateCredentials():
    import base64

    splitter='<PC+,DFS/-SHQ.R'
    directory='C:\\PCT'

    if not os.path.exists(directory):
        os.makedirs(directory)

    print('I will be saving an encrypted file at {}.\n'.format(directory))

    lanid = base64.b64encode(bytes(input('   LanID: '), encoding='utf-8')).decode('utf-8')  
    email = base64.b64encode(bytes(input('   eMail: '), encoding='utf-8')).decode('utf-8')
    password = base64.b64encode(bytes(input('   PassW: '), encoding='utf-8')).decode('utf-8')
    cred = lanid+splitter+email+splitter+password
    with open(directory+'\\Credentials.txt','w+') as file:
        file.write(cred)
        file.close()

cred = getCredentials()

updateCredentials()

1

एन्क्रिप्ट की गई कॉन्फ़िगरेशन फ़ाइल में कॉन्फ़िगरेशन जानकारी रखें। कुंजी का उपयोग करके अपने कोड में इस जानकारी को क्वेरी करें। इस कुंजी को प्रति वातावरण में एक अलग फ़ाइल में रखें, और इसे अपने कोड के साथ संग्रहीत न करें।


1

क्या आप गड्ढे जानते हैं?

https://pypi.python.org/pypi/pit (केवल py2 (संस्करण 0.3))

https://github.com/yoshiori/pit (यह py3 (वर्तमान संस्करण 0.4) पर काम करेगा)

test.py

from pit import Pit

config = Pit.get('section-name', {'require': {
    'username': 'DEFAULT STRING',
    'password': 'DEFAULT STRING',
    }})
print(config)

Daud:

$ python test.py
{'password': 'my-password', 'username': 'my-name'}

~ / गड्ढे / default.yml:

section-name:
  password: my-password
  username: my-name

3
पिट का कोई दस्तावेज नहीं है
उत्तराधिकारी

जैसा कि @successhawk ने नोट किया है - मुझे "गड्ढे" के लिए उन गितुब / पिपी लिंक में कोई दस्तावेज नहीं दिख रहा है - लेकिन उपरोक्त विवरण स्पष्ट है - और कुल मिलाकर मुझे आसान दृष्टिकोण से "छिपने" के लिए यह समाधान पसंद है ...
netbignignate

मैं उस मॉड्यूल का उपयोग करने के लिए अनिच्छुक हूं जिसे बनाए नहीं रखा गया है, और जब मुझे निर्देश के अनुसार उपयोग करने का प्रयास किया जाता है, तो मुझे त्रुटियां मिलती हैं:/usr/lib/python3.7/site-packages/pit.py:93: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. return yaml.load(open(Pit._config))
netdesignate

1

यदि विंडोज पर चल रहा है, तो आप win32crypt लाइब्रेरी का उपयोग करने पर विचार कर सकते हैं। यह स्क्रिप्ट चलाने वाले उपयोगकर्ता द्वारा संरक्षित डेटा (कुंजी, पासवर्ड) के भंडारण और पुनर्प्राप्ति की अनुमति देता है, इस प्रकार पासवर्ड आपके कोड में स्पष्ट पाठ या ओफ़्स्कुलेटेड प्रारूप में कभी संग्रहीत नहीं होते हैं। मुझे यकीन नहीं है कि अन्य प्लेटफार्मों के लिए एक समान कार्यान्वयन है, इसलिए win32crypt के सख्त उपयोग के साथ आपका कोड पोर्टेबल नहीं है।

मेरा मानना ​​है कि मॉड्यूल यहां प्राप्त किया जा सकता है: http://timgolden.me.uk/pywin32-docs/win32c.html.html


1

एक तरीका जो मैंने किया है वह इस प्रकार है:

अजगर के खोल पर:

>>> from cryptography.fernet import Fernet
>>> key = Fernet.generate_key()
>>> print(key)
b'B8XBLJDiroM3N2nCBuUlzPL06AmfV4XkPJ5OKsPZbC4='
>>> cipher = Fernet(key)
>>> password = "thepassword".encode('utf-8')
>>> token = cipher.encrypt(password)
>>> print(token)
b'gAAAAABe_TUP82q1zMR9SZw1LpawRLHjgNLdUOmW31RApwASzeo4qWSZ52ZBYpSrb1kUeXNFoX0tyhe7kWuudNs2Iy7vUwaY7Q=='

फिर, निम्नलिखित कोड के साथ एक मॉड्यूल बनाएं:

from cryptography.fernet import Fernet

# you store the key and the token
key = b'B8XBLJDiroM3N2nCBuUlzPL06AmfV4XkPJ5OKsPZbC4='
token = b'gAAAAABe_TUP82q1zMR9SZw1LpawRLHjgNLdUOmW31RApwASzeo4qWSZ52ZBYpSrb1kUeXNFoX0tyhe7kWuudNs2Iy7vUwaY7Q=='

# create a cipher and decrypt when you need your password
cipher = Fernet(key)

mypassword = cipher.decrypt(token).decode('utf-8')

एक बार जब आप यह कर लेते हैं, तो आप या तो सीधे माइपासवर्ड आयात कर सकते हैं या आप टोकन और सिफर को आयात कर सकते हैं जैसे कि जरूरत के अनुसार डिक्रिप्ट करने के लिए।

जाहिर है, इस दृष्टिकोण में कुछ कमियां हैं। यदि किसी के पास टोकन और कुंजी दोनों हैं (जैसे कि यदि उनके पास स्क्रिप्ट होगी), तो वे आसानी से डिक्रिप्ट कर सकते हैं। हालाँकि यह आपत्तिजनक है, और यदि आप कोड (Nuitka जैसी किसी चीज़ के साथ) को संकलित करते हैं, तो कम से कम आपका पासवर्ड हेक्स संपादक में सादे पाठ के रूप में दिखाई नहीं देगा।


0

यह आपके प्रश्न का सटीक उत्तर नहीं देता है, लेकिन यह संबंधित है। मैं एक टिप्पणी के रूप में जोड़ने जा रहा था, लेकिन अनुमति नहीं थी। मैं इसी मुद्दे के साथ काम कर रहा हूं, और हमने जेनकिंस का उपयोग करने वाले उपयोगकर्ताओं को स्क्रिप्ट को उजागर करने का निर्णय लिया है। यह हमें db क्रेडेंशियल्स को एक अलग फ़ाइल में संग्रहीत करने की अनुमति देता है जो एक सर्वर पर एन्क्रिप्ट और सुरक्षित है और गैर-प्रवेशकों के लिए सुलभ नहीं है। यह हमें UI बनाने और थ्रॉटलिंग निष्पादन के लिए एक शॉर्टकट की भी अनुमति देता है।


0

आप स्क्रिप्ट के बाहर पासवर्ड संग्रहीत करने और रनटाइम पर आपूर्ति करने की संभावना पर भी विचार कर सकते हैं

उदाहरण के लिए fred.py

import os
username = 'fred'
password = os.environ.get('PASSWORD', '')
print(username, password)

जिसे चलाया जा सकता है

$ PASSWORD=password123 python fred.py
fred password123

"अस्पष्टता के माध्यम से सुरक्षा" की अतिरिक्त परतों का उपयोग करके प्राप्त किया जा सकता है base64 कोड में कम स्पष्ट नामों का उपयोग करके और कोड से वास्तविक पासवर्ड को और अधिक विचलित (जैसा कि ऊपर सुझाव दिया गया है) ।

यदि कोड एक रिपॉजिटरी में है, तो अक्सर इसके बाहर के रहस्यों को संग्रहीत करना उपयोगी होता है , इसलिए कोई इसे~/.bashrc (या तिजोरी, या लॉन्च स्क्रिप्ट, ...) में जोड़ सकता है।

export SURNAME=cGFzc3dvcmQxMjM=

और के लिए बदल fred.pyजाते हैं

import os
import base64
name = 'fred'
surname = base64.b64decode(os.environ.get('SURNAME', '')).decode('utf-8')
print(name, surname)

फिर से लॉगिन करें और

$ python fred.py
fred password123

0

एक साधारण एक्सोर क्यों नहीं है?

लाभ:

  • द्विआधारी डेटा की तरह दिखता है
  • कोई भी इसे जानने की कुंजी के बिना पढ़ सकता है (भले ही यह एक चार हो)

मैं उस बिंदु पर पहुंच जाता हूं, जहां मैं सामान्य शब्दों के लिए साधारण बी 64 स्ट्रिंग्स को पहचानता हूं और साथ ही रोट 13 भी। Xor इसे बहुत कठिन बना देगा।



-1

पायथन में 'नेट - उनके लिए सिर्फ गूगल - पर कई ROT13 उपयोगिताओं को लिखा गया है। ROT13 स्ट्रिंग को ऑफ़लाइन एनकोड करता है, इसे स्रोत में कॉपी करता है, ट्रांसमिशन के बिंदु पर डीकोड करता है।

लेकिन यह वास्तव में कमजोर सुरक्षा है ...


कृपया इस उत्तर को और अधिक उपयोगी बनाने के लिए एक लिंक या नमूना कोड शामिल करें
मीका स्टबब्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.