मैं हाल ही में एफ़टीपी से निपट रहा हूं और मुझे इंडी घटक TIdFTP
की सुरक्षा के बारे में निश्चित नहीं है। यही कारण है कि मैंने कुछ परीक्षण बनाए हैं जिन्हें मैं आपके साथ साझा करना चाहता हूं ताकि आप सर्वोत्तम प्रथाओं और यह कैसे किया जा सके।डेल्फी 7 टीआईडीएफटीपी एफ़टीपी सुरक्षा (पासवर्ड सुरक्षा)
सबसे पहले मैं सिर्फ वस्तु इंस्पेक्टर का उपयोग कर उपयोगकर्ता नाम और पासवर्ड घटक में कहा:
और एक सीधा संबंध है जो अच्छी तरह से काम करता है बनाया:
procedure TForm1.FormActivate(Sender: TObject);
begin
try
FTP.Connect();
ShowMessage ('Connection success');
except
ShowMessage ('Connection failure');
end;
end;
इस विधि के साथ समस्या यह है कि यदि आप संसाधन हैकर जैसे साधारण टूल का उपयोग करते हैं तो आप तुरंत उस डेटा को देख सकते हैं:
Host = 'ivstefano.com'
Password = 'testpass'
Username = 'testuser'
तब मैं OI से निकालकर और कोड में यह डालने हर कोई के रूप में किसी और करता है के द्वारा एक छोटा सा होशियार होने का फैसला किया:
FTP.Host:= 'ivstefano.com';
FTP.Username:= 'testuser';
FTP.Password:= 'testpass';
फिर भी किसी को होशियार वह आसानी से हेक्स संपादक की तरह कुछ उपकरण का उपयोग और देख सकते हैं अगर क्या में exe में संकलित किया गया है:
तो क्या मैं अंत में एक एन्क्रिप्शन उपकरण OTP (One Time Pad Wiki) जिसे आप यहां Sample OTP tool से डाउनलोड कर सकते हैं का उपयोग कर बनाने के लिए था:
मैंने इसे 'पासवर्ड' कीवर्ड के साथ अपना पासवर्ड 'testpass' एन्क्रिप्ट करने के लिए उपयोग किया। तब मैं, OTP एन्क्रिप्टेड स्ट्रिंग (#25+#2+#3+#7+#117+#19+#31+#6
) और कुंजी (#108+#101+#109+#111+#110
) ले लिया दोनों पात्रों में से ASCII राशि में है और उन्हें अपने मुख्य एफ़टीपी कनेक्शन कार्यक्रम में प्रयुक्त OTP फिर से उपयोग कर उन्हें डिक्रिप्ट करने के लिए:
function opt(text, key: String): String;
var i: Integer;
begin
SetLength(Result, length(text));
for i:= 1 to length(text) do
Result[i]:= Char(Byte(text[i]) xor (i + Byte(key[i mod length(key)])));
end;
procedure TFTPTester.FormActivate(Sender: TObject);
var decyptedPass: String;
begin
decyptedPass:= opt(#25+#2+#3+#7+#117+#19+#31+#6, #108+#101+#109+#111+#110);
FTP.Host:= 'ivstefano.com';
FTP.Username:= 'testuser';
FTP.Password:= decyptedPass;
try
FTP.Connect();
ShowMessage ('Connection success with pass: ' + decyptedPass);
except
ShowMessage ('Connection failure');
end;
end;
और आप कर सकते हैं के रूप में देखना यह ठीक से जोड़ता है:
और यदि हम हेक्स को देखो फिर से हम देख सकते हैं keyphrase और एन्क्रिप्टेड पासवर्ड यहाँ लेकिन कम से कम नहीं हैं कि सादा पाठ पासवर्ड:
निष्कर्ष: फिर भी, "हैकर" keyphrase और एन्क्रिप्टेड पास देख सकते हैं, लेकिन यह अनुमान लगाना कोड के इंजीनियर को बदलने और देखने के लिए कुंजी का उपयोग कर, क्योंकि वह है पास डिक्रिप्ट करने के लिए कैसे कठिन होने जा रहा है क्या मैंने जिस तरह का एन्क्रिप्शन इस्तेमाल किया है। असल में मैं अपनी खुद की एन्क्रिप्शन और डिक्रिप्शन का आविष्कार कर सकता हूं, इसलिए यह आवश्यक नहीं है कि ओटीपी लेकिन यदि कोई और अधिक उन्नत है तो भी वह एन्क्रिप्टेड पासवर्ड को डिक्रिप्ट करने और कुंजी का उपयोग करके एन्क्रिप्टेड पास पर लागू करके मेरे एफ़टीपी तक पहुंचने का तरीका देख सकता है।
अतिरिक्त विचार: शायद डेल्फी कोड को खराब करना बेहतर विकल्प होगा?
प्रश्न: यदि कोई है तो अपने पासवर्ड की सुरक्षा का एक बेहतर तरीका क्या है?
स्रोत: यहाँ FTPTester और OTP जनरेटर के लिए स्रोत कोड पा सकते हैं: Link to both
ध्यान दें कि आप क्या दिखा रहे हैं OTP का नहीं है भेजता है। एक ओटीपी (वन-टाइम पैड) एक कुंजी को उसी लंबाई का उपयोग करता है जैसे डेटा संरक्षित किया जाता है (और कुंजी पूरी तरह से यादृच्छिक होनी चाहिए)। –
आप सही हैं, लेकिन फिर जब मैंने सवाल पूछा, तो मुझे कोई बेहतर जानकारी नहीं मिली :) – ziGi
कुछ भी आपको कम से कम प्रश्न में संशोधन करने से रोकता है। :) ओटीपी हर समय की सबसे गलत समझ एन्क्रिप्शन योजना होना चाहिए, फिर भी सबसे सरल ... –