2015-04-22 37 views
3

我在Rstudio的代碼裏面放了一個密碼,我只是想以某種方式使其不清楚,所以當我將代碼顯示給某人時,他們看不到密碼。有關如何做到這一點的任何建議? 感謝很多如何在R中隱藏/星號代碼的一部分?

+0

您是否在RStudio編輯器中顯示某人?我不認爲你可以在編輯器中隱藏你的密碼,但我可能是錯的。 –

+0

@AlexA。我在編輯器中的代碼中輸入了密碼,所以如果我想將代碼顯示給某人,他們將看到密碼。我該如何在編輯器中使用密碼? – Mohammad

+1

相關:http://www.magesblog.com/2014/07/simple-user-interface-in-r-to-get-login.html –

回答

5

你應該做一個新的R腳本(我們稱之爲login_credentials.R)和存儲您的密碼有

username <- "username_here" 
password <- "password_here" 

一旦你保存,你就可以加載使用腳本源()

這將加載用戶名和密碼變量。

source(login_credentials.R) 
> username 
[1] "username_here" 
> password 
[1] "password_here"  

login_function(username,password) 
+0

不錯,不會這樣想。只要你在'login_credentials.R'上適當地設置了權限,以便別人不能打開_that_文件來獲取你的信息,我認爲這將是一個好方法。 –

+0

@楊丞琳輝煌,謝謝。 – Mohammad

+2

@Ken Yeoh這裏只有一個小問題,在R運行源代碼(login_credentials.R)後,您會在環境面板中看到用戶名和密碼的值。我應該如何處理這個問題? – Mohammad

7

您可以在源文件中隱藏密碼。

您可以運行類似

dput(charToRaw("Password")) 
# as.raw(c(0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64)) 

得到你的密碼的數字轉儲。然後,您可以在您的腳本

pwd <- as.raw(c(0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64)) 
login("username", rawToChar(pwd)) 

至少會使其減少人類可讀的和不會出現在文本值的環境瀏覽器中的變量(至少我認爲,我是不確定RStudio如何顯示原始數據)。

+1

我會非常警惕實施這個解決方案。有人可以很容易地調用'rawToChar(as.raw(c(0x50,0x61,0x73,0x73,0x77,0x6f,0x72,0x64)))'自己並看到你的密碼全屏顯示 – bibzzzz

1

稍微更安全的解決方案是存儲密碼的散列。這可以用函數digest來實現:

> digest::digest("password") 
[1] "380796939c86c55d6aa8ea8c941f7652"

這實現MD5散列是單向密碼函數和原始密碼不能從該散列檢索,即沒有反函數。

然後,您將需要修改你的代碼,你輸入密碼,散列輸入密碼的一部分:

# Username and password part of code 
username <- "username_here" 
password_hash <- "380796939c86c55d6aa8ea8c941f7652" 

... 

# Password testing part of code 
if (digest::digest(user_password_input) == password_hash){ 
    "password_correct" 
}else{ 
    "password_incorrect"} 

其中user_password_input是包含輸入密碼的變量。散列密碼是安全的,因爲即使有人擁有散列密碼,他們也不能使用它來通過密碼驗證。如果他們確實輸入密碼的散列,它將被重新哈希,並且與password_hash變量不同。

使用散列法是一種很好的做法,因爲您的實際密碼永遠不會存儲在代碼中,散列本身也沒有用處。

+0

我不認爲OP正在測試密碼,我想OP可能需要使用密碼(也許傳遞給SFTP通話)。 – Gregor

+0

我不太瞭解你的評論,但重申我的觀點,將密碼存儲爲散列有效隱藏真實密碼,因爲散列無法以任何方式使用通過認證 – biostu

+0

我的答案的密碼測試部分是演示如何選擇使用此建議可以使用哈希密碼。 – biostu

1

您可以在您的主目錄或項目目錄中創建一個.Renviron文件,您可以在這裏將這樣的信息存儲在R腳本中使用的環境變量中。

如果這是~/.Renviron/path/to/my/project/.Renviron內容:

YO=secretsecret 

然後你就可以通過檢索Sys.getenv("YO")secretsecret。我寫了如何做到這一點API認證here

注意:確保.Renviron文件以換行符結束可能非常重要!此外,在此生效之前,您需要重新啓動R或Rstudio。請閱讀R startup瞭解更多一般信息。