如何在R中隐藏/星号部分代码?

时间:2015-04-22 21:17:46

标签: r

我在Rstudio的代码中输入了一个密码,我只是想以某种方式弄清楚,所以当我向某人显示我的代码时,他们看不到密码。有关如何做到这一点的任何建议? 非常感谢

5 个答案:

答案 0 :(得分:7)

您可以在源文件中隐藏密码。

您可以运行类似

的内容
<PySide.QtCore.QModelIndex(2,0,0x0,QStringListModel(0x17b0b40) )   at 0x7ff1a3715998>
<PySide.QtGui.QStringListModel object at 0x7ff1a3715950>
C++ address....... PySide.QtGui.QStringListModel/0x17b0b40
hasOwnership...... 1
containsCppWrapper 1
validCppObject.... 1
wasCreatedByPython 1

获取密码的数字转储。然后你可以在你的脚本中加入

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

这至少会使它变得不那么人性化,并且在环境浏览器中不会有文本值的变量(至少我认为,我不确定RStudio如何显示原始数据)。

答案 1 :(得分:6)

你应该制作一个新的R脚本(让我们称之为login_credentials.R)并在那里存储你的密码

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

保存后,您可以使用source()

加载该脚本

这将加载用户名和密码变量。

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

login_function(username,password)

答案 2 :(得分:2)

您可以在主目录或项目目录中创建.Renviron文件,在此目录中将这样的信息存储在环境变量中,以便在R脚本中使用。

如果这是~/.Renviron/path/to/my/project/.Renviron的内容:

YO=secretsecret

然后,您可以通过secretsecret检索Sys.getenv("YO")。我写了如何为API身份验证here执行此操作。

注意:确保您的.Renviron文件以换行符结束非常重要!此外,在生效之前,您需要重新启动R或Rstudio。阅读R startup以获取更多一般信息。

答案 3 :(得分: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变量不同。

使用哈希是一种很好的做法,因为您的实际密码永远不会存储在代码中,并且哈希本身也没用。

答案 4 :(得分:1)

getPass软件包将对您有帮助。该程序包具有与readline()类似的getPass()函数,唯一的区别是键入时不会打印用户的文本。

例如,请考虑以下命令创建到数据库的连接,您通常可以在其中键入用户名和密码。

连接<-dbConnect(驱动程序,连接参数,用户名密码

尝试用getPass()函数替换密码:

图书馆(getPass) 连接<-dbConnect(驱动程序,connection_parameters,用户名 getPass()

因此,每当运行此行代码时,您都会看到一个弹出窗口,要求您输入密码。键入时密码不会显示,但会被点(或星号)掩盖。 Password PopUp window

尽管这要求您每次运行都输入密码,但它至少使您能够屏蔽密码。

该函数的参数为​​:

getPass(msg =“ PASSWORD:”,noblank = FALSE,forcemask = FALSE)