পাইথন স্ক্রিপ্টে একটি পাসওয়ার্ড লুকানো (কেবল অনিরাপদ অবলম্বন)


127

আমি পাইথন স্ক্রিপ্ট পেয়েছি যা একটি ওডিবিসি সংযোগ তৈরি করছে। ওডিবিসি সংযোগটি সংযোগের স্ট্রিং দিয়ে উত্পন্ন হয়। এই সংযোগের স্ট্রিংয়ে আমাকে এই সংযোগের জন্য ব্যবহারকারীর নাম এবং পাসওয়ার্ড অন্তর্ভুক্ত করতে হবে।

ফাইলটিতে এই পাসওয়ার্ডকে অস্পষ্ট করার কোন সহজ উপায় আছে (আমি যখন ফাইলটি সম্পাদনা করছি তখন কেউ পাসওয়ার্ডটি পড়তে পারে না)?


16
কেবল মনে রাখবেন যে এই ফাইলটি চালিত ব্যবহারকারীদের এতে কমপক্ষে পড়ার অ্যাক্সেস থাকবে এবং সহজেই পাসওয়ার্ডগুলি দখল করতে পারে। আপনি যদি কেবল পাতলা পঠন করতে পারেন এবং লোকেরা এটি আপনার কাঁধের উপরে দিয়ে দেখে তা নিয়ে উদ্বিগ্ন হন, তবে সতর্ক হওয়া উচিত যখন গড় পর্যবেক্ষক কোনও পাসওয়ার্ড ধরার জন্য এত দ্রুত জিনিস মুখস্ত করতে না পারে, স্ক্রিপ্টটিতে অ্যাক্সেস সহ যে কেউ এবং সামান্য কিছু প্রযুক্তিগত জ্ঞান এবং সামান্য পরিমাণের উচ্চাকাঙ্ক্ষী আপনার পাসওয়ার্ডগুলি ধরতে সক্ষম হবে। সবসময় খুব সাবধানতার মধ্যে দিয়ে সুরক্ষা ভাবেন, এটি গুরুত্বপূর্ণ।
Youarefunny

উত্তর:


117

বেস 64 এনকোডিংটি স্ট্যান্ডার্ড লাইব্রেরিতে রয়েছে এবং কাঁধে সার্ফার বন্ধ করতে এটি করবে:

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

5
আমি রাজী. বেস 64 এনকোড করা পাসওয়ার্ডটি অনেক বেশি রহস্যময় দেখাচ্ছে।
এড হ্যাবর

4
তবে এই স্ক্রিপ্টটি ব্যবহারকারীর দ্বারা চালিত হওয়া উচিত এবং পাসওয়ার্ডটি অবশ্যই ব্যবহার করে না help
মার্টিন বেকেট 15

79
আমি মনে করি না যে এই প্রসঙ্গে base64তুলনায় ভাল উদ্বিগ্ন rot13। বিপরীতে, base64এর বৈশিষ্ট্যযুক্ত বৈশিষ্ট্যগুলি (সমান চিহ্ন, ...) রয়েছে এবং এটি অন্যান্য পদ্ধতির তুলনায় সহজেই সনাক্তযোগ্য। যদিও কোনও আপত্তিহীন কোনও ব্যবহারিক সুবিধা নেই। সত্যিই খারাপ যে এই উত্তরটি এটি অত্যন্ত রেটযুক্ত। এটি কেবল সুরক্ষার একটি মিথ্যা অনুভূতি দেয় ...
স্ক্লামার

12
আপনি যদি পাসওয়ার্ডটি রেকর্ড করে রাখেন যাতে এটি স্ক্রিপ্টের সাহায্যে ব্যবহার করা যায় তবে স্ক্রিপ্টটিতে অ্যাক্সেস থাকা যে কেউ পাসওয়ার্ড পেতে সক্ষম হবেন, আপনি কোন এনক্রিপশন পদ্ধতি ব্যবহার করেন তা বিবেচনা না করেই। এখানে প্রয়োজনীয়তাটি ছিল কেবলমাত্র কোনওটি থেকে পাসওয়ার্ডটি লুকানোর জন্য যখন এটি খোলা ছিল তখন স্ক্রিপ্টটি দেখছিল। এই ক্ষেত্রে base64বাঞ্ছনীয় rot13যেমন পাইথন মান লাইব্রেরিতে রয়েছে।
ডেভ ওয়েব

17
বেস 64 এনক্রিপশন নয়। এটি সেরা নিখুঁত।
csgeek

52

যখন আপনাকে দূরবর্তী লগইনের জন্য পাসওয়ার্ড নির্দিষ্ট করতে হবে তখন ডিকলাস এফ শিয়েরস ইউনিক্সে সাধারণত অনুমোদিত সমাধান।
আপনি পাথ নির্দিষ্ট করার জন্য একটি ফাইল থেকে একটি পাসওয়ার্ড-থেকে-ফাইল বিকল্প যুক্ত করুন এবং কোনও ফাইল থেকে প্লেটেক্সটটি পড়ুন।
ফাইলটি তখন অপারেটিং সিস্টেম দ্বারা সুরক্ষিত ব্যবহারকারীর নিজস্ব অঞ্চলে থাকতে পারে। এটি বিভিন্ন ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে তাদের নিজস্ব ফাইল বাছাই করতে সহায়তা করে।

স্ক্রিপ্ট ব্যবহারকারীর জানার অনুমতি নেই এমন পাসওয়ার্ডগুলির জন্য - আপনি স্ক্রিপ্টটি অতিমাত্রায় অনুমতি নিয়ে চালাতে পারেন এবং সেই রুট / অ্যাডমিন ব্যবহারকারীর মালিকানাধীন পাসওয়ার্ড ফাইল থাকতে পারে।


1
রুট বা অ্যাডমিন পাসওয়ার্ড না দিয়ে কীভাবে আপনি ঠিকঠাক অনুমতি নিয়ে স্ক্রিপ্টটি চালাবেন? এটি কি ইউআইডি বিট সেট সম্পর্কিত?
Youarefunny

4
কিছু মনে করবেন না আমি এটি বুঝতে পেরেছি। অন্য কারও জন্য যারা যত্নবান: যদি কোনও স্ক্রিপ্টে সেটুইড বিট সেট থাকে তবে ওএস অনুবাদকারীর কাছে সেটুইড বিট 'পাস' করে দেবে। দুর্ভাগ্যক্রমে, বিশাল ব্যবধানযুক্ত সুরক্ষা গর্ত রয়েছে তাই বেশিরভাগ আধুনিক ডিস্ট্রসগুলি স্ক্রিপ্টগুলির জন্য সেটুইড বন্ধ করে দেয়।
Youarefunny

- পাসওয়ার্ড-থেকে-ফাইল বিকল্পে আমি কোনও তথ্য খুঁজে পাই না। আপনার কোন উদাহরণ আছে? ধন্যবাদ!
পিরামিডফেস

@ পিরামিডফেস - আমি বোঝাতে চাইছি যে আপনি এই জাতীয় বৈশিষ্ট্যটি কোড করবেন এবং কোনও ফাইল থেকে পাসডাব্লুটি পড়ার ক্ষমতা যুক্ত করবেন
মার্টিন বেকেট

@ মার্টিনবেকেট কিন্তু ইউয়ারফুন্নি যেমন বলেছিলেন, আপনাকে পাসওয়ার্ড ফাইলে স্ক্রিপ্টের রুট অ্যাক্সেস দেওয়ার জন্য অজগরকে সেটুইড বাড়াতে হবে?
পিরামিডফেস

51

এখানে একটি সহজ পদ্ধতি:

  1. একটি অজগর মডিউল তৈরি করুন - আসুন একে পীকুবুপি বলি।
  2. Peekaboo.py এ, পাসওয়ার্ড এবং যে পাসওয়ার্ডের প্রয়োজন কোনও কোড উভয়ই অন্তর্ভুক্ত করুন
  3. এই মডিউলটি আমদানি করে (পাইথন কমান্ডলাইন ইত্যাদির মাধ্যমে ...) একটি সংকলিত সংস্করণ তৈরি করুন - পীকু.পি.সি.সি.
  4. এখন, পিকুবু.পিটি মুছুন।
  5. আপনি এখন সুখের সাথে কেবল পীকু.পিপিতে নির্ভর করে পিকবাবুর আমদানি করতে পারেন। যেহেতু পীকু.পি.সি বাইট সংকলিত এটি নৈমিত্তিক ব্যবহারকারীর কাছে পঠনযোগ্য নয়।

এটি বেস 64 এর ডিকোডিংয়ের চেয়ে কিছুটা বেশি সুরক্ষিত হওয়া উচিত - যদিও এটি পাই-টো_পিসিপি ডেকম্পাইলারের পক্ষে ঝুঁকিপূর্ণ।


2
এটিতে এখনও কিছু ত্রুটি রয়েছে, তবে এটি আসলে যা আমি চাই তার খুব কাছাকাছি। এটি আমাকে পাইথন স্ক্রিপ্টগুলি ডেমো করার অনুমতি দেবে যাতে পাসওয়ার্ড অনস্ক্রিনটি প্রকাশ না করে বা কমান্ড প্রম্পটে টাইপ না করে ব্যবহারকারী / পাসডাব্লুড সংযোগগুলি অন্তর্ভুক্ত করে। import peekabopeekaboo.passwordpassword='secret'
পিকাবু

8
আপনি যদি এই ধারণাটি আরও একধাপ এগিয়ে নিয়ে যেতে চান তবে আপনি সিথন ব্যবহার করে কোনও .py ফাইল সি-তে সংকলন করতে পারবেন এবং নির্দিষ্ট প্ল্যাটফর্ম নির্দিষ্ট বাইনারি তৈরি করতে পারবেন (যেমন: উইন্ডোজের জন্য .pyd, ম্যাকোস ইত্যাদির জন্য ইত্যাদি) ... cythonizingআপনার স্ক্রিপ্টের সাহায্যে এবং উত্পন্ন বাইনারি ভাগ করে নেওয়ার সাথে সাথে আপনি এই উত্তরটির সুবিধা পাবেন + অবসন্নতার আরও একটি স্তর যুক্ত করুন, কারণ এখন আপনার কাছে পাসওয়ার্ড পেতে সি কোডটি ছড়িয়ে দেওয়া হয়েছে। এটি 100% সুরক্ষিত নয়, তবে আপনি যে সংবেদনশীল ডেটা গোপন করতে চান তা পেতে এটি প্রচুর পরিশ্রম নেবে।
Fnord

সাইথোনাইজিং, নিখুঁত
আরনো

29

আপনি যদি ইউনিক্স সিস্টেমে কাজ করছেন তবে স্ট্যান্ডার্ড পাইথন লাইব্রেরিতে নেটআরসিআরডি মডিউলটি গ্রহণ করুন। এটি একটি পৃথক পাঠ্য ফাইল (.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

ব্যবহারকারীর নাম এবং পাসওয়ার্ডটি ব্যবহারকারী দ্বারা রানটাইম সময় দেওয়া যাবে না ধরে নেওয়া সর্বোত্তম সমাধানটি সম্ভবত একটি পৃথক উত্স ফাইল যা আপনার মূল কোডটিতে আমদানি করা ব্যবহারকারী নাম এবং পাসওয়ার্ডের জন্য কেবলমাত্র পরিবর্তনশীল সূচনাযুক্ত containing শংসাপত্রগুলি পরিবর্তিত হলে এই ফাইলটির সম্পাদনা প্রয়োজন। অন্যথায়, যদি আপনি কেবল গড় স্মৃতি সহ কাঁধে সার্ফার সম্পর্কে উদ্বিগ্ন হন তবে বেস 64 এনকোডিং সম্ভবত সবচেয়ে সহজ সমাধান। ROT13 ম্যানুয়ালি ডিকোড করা খুব সহজ, এটি সংবেদনশীল নয় এবং এটি এনক্রিপ্ট হওয়া অবস্থায় খুব বেশি অর্থ ধরে রাখে। পাইথন স্ক্রিপ্টের বাইরে আপনার পাসওয়ার্ড এবং ব্যবহারকারী আইডি এনকোড করুন। তিনি স্ক্রিপ্টটি ব্যবহারের জন্য রানটাইমে ডিকোড করুন।

স্বয়ংক্রিয় কাজের জন্য স্ক্রিপ্টগুলির শংসাপত্র সরবরাহ করা সর্বদা একটি ঝুঁকিপূর্ণ প্রস্তাব। আপনার স্ক্রিপ্টের নিজস্ব শংসাপত্র থাকতে হবে এবং এটি যে অ্যাকাউন্টটি ব্যবহার করে তার প্রয়োজনের তুলনায় অন্য কোনও অ্যাক্সেস থাকা উচিত নয়। কমপক্ষে পাসওয়ার্ডটি দীর্ঘ এবং বরং এলোমেলো হওয়া উচিত।


খুব সুন্দর উত্তর - ধন্যবাদ। যে ছোট স্ক্রিপ্টগুলির জন্য আমি লিখছি (যা যাইহোক রক্ষণাবেক্ষণের স্ক্রিপ্টগুলি - BASE64 এনকোডিং যথেষ্ট হবে)
বার্নহারড্রেস

2
এটি ভাল লাগছে, তবে আপনি কি উদাহরণ প্রয়োগ করতে পারেন? এই মুহুর্তে এটি কেবলমাত্র একটি সাধারণ অনুশীলনের বিবরণ, এবং কারও পক্ষে এতটা কার্যকর নয় যে আগে এটি করেন নি।
ড্যানিড

18

স্ক্রিপ্টের বাইরের কোনও ফাইল থেকে ব্যবহারকারীর নাম এবং পাসওয়ার্ড কীভাবে আমদানি করা যায়? এইভাবে কেউ স্ক্রিপ্টটি ধরে রাখলেও, তারা স্বয়ংক্রিয়ভাবে পাসওয়ার্ডটি পায় না।


15

বেস 64 আপনার সাধারণ প্রয়োজনে যাওয়ার উপায়। কিছু আমদানি করার দরকার নেই:

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

2
বোকা ঠিক কি ?! পুরো উত্তর, না আমদানি করা অংশ?
tzot

18
বেস 64 কেবল সুরক্ষার মায়া যুক্ত করে।
ফ্লাইওয়াত

13
জোনাথন, দেখে মনে হচ্ছে আপনি প্রশ্নটি পড়েন নি। এটি অস্পষ্টতা সম্পর্কে (এবং একটি খুব অস্থায়ী একটি), সুরক্ষা নয় , সুতরাং আপনি কেন আমার উত্তরকে সহায়ক মনে করেন না তা আমি বুঝতে পারি না।
tzot

1
বেস 64 মডিউলটি ব্যবহার করার পরিবর্তে আপনি এটি করতে পারেন তা আমি জানতাম না। এবং
জিলিবের

1
@ ডেনিস বেস 64 মডিউল ব্যবহার করা আজকাল পছন্দসই উপায়। পরেরটি পাইথনের নতুন সংস্করণগুলিতে আর কাজ করে না।
জিয়েকোমন

5

পাইথন 3 অপ্রয়োজনীয় ব্যবহারের জন্য আলাদাভাবে করা 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)

পাইথন 3 কীভাবে বাইট পরিচালনা করে (এবং সেই অনুযায়ী স্ট্রিংগুলি) পরিচালনা করে সে সম্পর্কে আরও তথ্যের জন্য দয়া করে অফিসিয়াল ডকুমেন্টেশন দেখুন


4

এটি একটি খুব সাধারণ সমস্যা। সাধারণত আপনি যেটা করতে পারেন তা হ'ল হয়

ক) এনকোড / ডিকোড (কেবল পচা 13 নয়) বা একরকম সিসার সাইফার ফাংশন তৈরি করুন

খ) পছন্দের পদ্ধতিটি হ'ল আপনার প্রোগ্রামের নাগালের মধ্যে একটি এনক্রিপশন কী ব্যবহার করে পাসওয়ার্ডটিকে এনকোড / ডিকোড করুন। এতে আপনি কীটি অ্যাক্সেস রক্ষা করতে ফাইল সুরক্ষা ব্যবহার করতে পারেন।

সেই লাইনগুলির সাথে যদি আপনার অ্যাপ্লিকেশন পরিষেবা / ডেমন হিসাবে চালিত হয় (ওয়েবসভারের মতো) আপনি পরিষেবাটি শুরু করার অংশ হিসাবে পাসওয়ার্ড ইনপুট সহ একটি পাসওয়ার্ড সুরক্ষিত কীস্টোরগুলিতে আপনার কীটি রাখতে পারেন। আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করতে প্রশাসক লাগবে, তবে আপনার কনফিগারেশন পাসওয়ার্ডগুলির জন্য আপনার কাছে সত্যিকারের ভাল প্রেগশন থাকবে।


2

আপনার অপারেটিং সিস্টেমটি সম্ভবত নিরাপদে ডেটা এনক্রিপ্ট করার সুবিধাগুলি সরবরাহ করে। উদাহরণস্বরূপ, উইন্ডোজটিতে ডিপিএপিআই (ডেটা সুরক্ষা API) রয়েছে। আপনি যখন প্রথমবার চালনা করেন তখন পরবর্তী রানগুলির জন্য এনক্রিপ্ট করা দূরে কাঠবিড়ালি করে কেন তাদের শংসাপত্রগুলির জন্য ব্যবহারকারীকে জিজ্ঞাসা করবেন না?


2

প্রমাণীকরণ / পাসওয়ার্ড / ব্যবহারকারীর নাম এনক্রিপ্ট করা বিবরণে রূপান্তর না করে আরও হোমগ্রাউন ট্র্যাক och এফটিপিএলআইবি কেবল উদাহরণ। " Pass.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 এনক্রিপ্ট করা ফাইলটি তৈরি না করে যদি এটি উপস্থিত না থাকে এবং একটি ডিকশনটি ফিরিয়ে দেয়, এবং আপডেটক্রেনডিয়াল আপডেট হবে।

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 (কেবল পাই 2) (সংস্করণ 0.3)

https://github.com/yoshiori/pit (এটি পাই 3 তে কাজ করবে (বর্তমান সংস্করণ 0.4))

test.py

from pit import Pit

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

চালান:

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

~ / .Pit / default.yml:

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

3
পিটের কোনও ডকুমেন্টেশন নেই
সাফল্যহাঁক

যেমন @ সুসকাহাওয়াক উল্লেখ করেছেন - আমি "পিট" এর জন্য সেই গিথুব / পাইপির লিঙ্কগুলিতে কোনও ডকুমেন্টেশন দেখতে পাই না - তবে উপরের বর্ণনাটি পরিষ্কার - এবং সামগ্রিকভাবে আমি সহজ দর্শন থেকে "গোপন" শংসাপত্রগুলির জন্য এই সমাধানটি পছন্দ করি ...
নেটডিজাইনেট

রক্ষণাবেক্ষণ করা হয়নি এমন একটি মডিউল ব্যবহার করতে আমি নারাজ, এবং আমি যখন নির্দেশাবলীর মতো এটি ব্যবহার করার চেষ্টা করেছি তখন আমি ত্রুটিগুলি পাই:/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))
নেট ডিজাইনেট

1

যদি উইন্ডোতে চলমান থাকে তবে আপনি win32crypt লাইব্রেরিটি বিবেচনা করতে পারেন। এটি স্ক্রিপ্টটি চালাচ্ছে এমন ব্যবহারকারী দ্বারা সুরক্ষিত ডেটা (কী, পাসওয়ার্ড) সঞ্চয় এবং পুনরুদ্ধারের অনুমতি দেয়, সুতরাং পাসওয়ার্ডগুলি কখনই আপনার কোডে সুস্পষ্ট পাঠ্য বা অপ্রচলিত বিন্যাসে সংরক্ষণ করা হয় না। আমি নিশ্চিত নই যে অন্য প্ল্যাটফর্মগুলির জন্য সমতুল্য প্রয়োগ রয়েছে কিনা, তাই উইন 32 ক্রাইপটির কঠোর ব্যবহারের সাথে আপনার কোডটি বহনযোগ্য নয়।

আমি বিশ্বাস করি যে মডিউলটি এখানে পাওয়া যাবে: http://timgolden.me.uk/pywin32-docs/win32crypt.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')

এটি হয়ে গেলে আপনি সরাসরি মাইপাসওয়ার্ড আমদানি করতে পারেন বা আপনি প্রয়োজন হিসাবে ডিক্রিপ্টে টোকেন এবং সিফার আমদানি করতে পারেন।

স্পষ্টতই, এই পদ্ধতির কিছু ত্রুটি রয়েছে। কারও কাছে যদি টোকেন এবং কী (উভয়ই তাদের স্ক্রিপ্ট থাকে তবে) তারা সহজেই ডিক্রিপ্ট করতে পারে। তবে এটি আপত্তিজনকভাবে কাজ করে এবং আপনি কোডটি (নুইটকার মতো কিছু দিয়ে) সংকলন করলে কমপক্ষে আপনার পাসওয়ার্ডটি হেক্স সম্পাদক সম্পাদনায় সাধারণ পাঠ্য হিসাবে উপস্থিত হবে না।


0

এটি আপনার প্রশ্নের সঠিকভাবে উত্তর দেয় না, তবে এটি সম্পর্কিত। আমি একটি মন্তব্য হিসাবে যোগ করতে যাচ্ছিলাম কিন্তু অনুমোদিত ছিল না। আমি এই একই সমস্যাটি নিয়ে কাজ করছি এবং আমরা জেনকিন্স ব্যবহারকারীদের কাছে স্ক্রিপ্টটি উন্মোচন করার সিদ্ধান্ত নিয়েছি। এটি আমাদের ডিবি শংসাপত্রগুলিকে একটি পৃথক ফাইলে সংরক্ষণ করতে দেয় যা একটি সার্ভারে এনক্রিপ্ট করা এবং সুরক্ষিত এবং অ-প্রশাসকদের কাছে অ্যাক্সেসযোগ্য নয়। এটি আমাদের ইউআই তৈরির জন্য এবং শ্বাসরুদ্ধকরণ কার্যকর করার জন্য একটি শর্টকাটও দেয়।


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

সরল এক্সর নেই কেন?

সুবিধাদি:

  • বাইনারি তথ্য মত দেখাচ্ছে
  • কোনওটি কীটি না জেনে এটি পড়তে পারে না (এমনকি এটি একক চর হলেও)

আমি সেই বিন্দুতে পৌঁছেছি যেখানে আমি সাধারণ শব্দের জন্য সাধারণ b64 স্ট্রিংগুলি এবং পচা 13 টিও স্বীকার করি। Xor এটি আরও শক্ত করে তুলবে।



-1

পাইথে পাইনে বেশ কয়েকটি রট 13 ইউটিলিটি রয়েছে 'নেট - কেবল তাদের জন্য গুগলে। ROT13 স্ট্রিংটিকে অফলাইনে এনকোড করুন, উত্সে এটি অনুলিপি করুন, সংক্রমণের সময়ে ডিকোড করুন।

তবে এটি সত্যই দুর্বল সুরক্ষা ...


এই উত্তরটি আরও কার্যকর করার জন্য দয়া করে একটি লিঙ্ক বা নমুনা কোড অন্তর্ভুক্ত করুন
মিকাহ স্টুবস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.