2011-12-01 79 views
7

假如我在我的計劃有一個重要的密碼的地方,我想使它更安全,例如:使「明文」字符串安全無損?

ftp.password := 'mypassword'; 

大約8年前,我用它來「破解東西」的樂趣,讓我找到了我這樣的東西很容易通過使用OllyDbg。

我需要知道的是,是否有辦法讓這件東西安全無虞。我想直接將密碼存儲到組件中,但是再次不知道它是否會有好處。

+4

不要存儲密碼。哈希然後存儲密碼。 –

+2

@David Heffernan - 如果這些密碼需要發送到另一個應用程序/服務(例如連接到FTP服務器),那麼這將不起作用。 – crashmstr

+2

@crash ftp不安全 –

回答

17

只是不這樣做。如果您想保持密碼安全,請勿將其放入程序中。如果程序是交互式的,你可以詢問用戶。如果沒有,您應該爲程序設置一些非密碼認證。

如果您必須將密碼嵌入到程序中,則該規則非常簡單 - 絕對不要將該程序授予任何不能執行密碼允許的任何操作。

+0

嗯,也許如果我爲程序製作一個用戶,即使有人確實得到了它,它也會更安全一點,但它們不會走得太遠。 –

2

這裏有一種方法 - 它保持它的安全從好奇的人用十六進制查看器,但當然不會在運行時用先進的技術工作:

function GetA: string; 
begin 
    Result := #$109#$121#$122; // 'myp' 
end; 

function Getb: string; 
begin 
    Result := #97#$115#$115#$119; // 'assw' 
end; 

function GetC: string; 
begin 
    Result := #$111#$114#$100; // 'ord' 
end; 

procedure TForm1.Whatever; 
begin 
    ftp.Password := GetA + GetB + GetC + GetD; 
end; 

正如我所說的,這不是從別人設置安全在代碼執行過程中使用調試程序中斷,並在內存設置後檢查內存中的ftp.password,但在十六進制查看器中是安全的。儘管如此,我通常會將ftp.password的設計時間值設置爲類似DoyouthinkImthatstupid?的值。

4

儘管我完全同意David Schwartz(你不應該直接在程序中嵌入任何密碼),但是任何人都可以通過更難找到它。

不是將字符串定義爲一個整體,而是可以通過程序構建字符串。這樣,字符串作爲一個整體永遠不會被存儲在您的可執行文件中,因此更難以找到。

+0

這是一個合理的答案,好主意。 –

5

雖然你不應該這樣做的答案是正確的,但在實踐中有時候現實世界會迫使你交出。在一個或兩個實例中,我被迫採用了類似於我使用的方法的一種方法,即編寫一個函數,該函數將使用一些數學公式從頭開始生成已知的密碼 - 例如,英文單詞的第一個字母倒數第一個8位數字的PI。當然,這仍然可以被破解,但它會讓這項任務變得更加困難,並且會妨礙偶然的瀏覽器。

當然,如果你真的使用FTP(而不是SFTP),那麼你仍然通過網絡以純文本傳遞密碼。最初我會更關心 - 這是一個更明顯的攻擊媒介。

+0

+1我會在打開調試器之前嗅探網絡流量。這很簡單。 –

3

這根本不是密碼學可以解決的問題。保護這個值的唯一方法是依靠操作系統提供的用戶訪問控制。確保文件的權限盡可能限制。 chown user:user file然後chmod 400 file

1

也許你可以加密字符串,當你讀它時解密它?

但即使如此,正如其他人所說,在應用程序內部存儲密碼並不是一個好主意。

即使您編碼或加密了字符串,它也不會對確定的人員安全。