gpt4 book ai didi

r - 有没有与 SAS PWENCODE 类似的 R 函数?

转载 作者:行者123 更新时间:2023-12-02 03:42:10 25 4
gpt4 key购买 nike

我正在尝试将当前在 R 代码中硬编码的密码移动到磁盘上的“加密”/编码文件中。

我想以与 SAS PWENCODE 过程类似的方式执行此操作( http://support.sas.com/documentation/cdl/en/proc/63079/HTML/default/viewer.htm#n0ii0upf9h4a67n1bcwcesmo4zms.htmODBC Password Security in SAS )。

R中有类似的东西吗?您使用什么方法在 R 中存储需要定期运行的代码的密码,而无需以键入密码的形式进行人工干预?

编辑:忘记提及:唯一看起来与我相似的是 RCurl::base64() 。

最佳答案

我在下面的博客文章中概述了在 Windows 上实现此目的的方法:

http://www.gilfillan.space/2016/04/21/Using-PowerShell-and-DPAPI-to-securely-mask-passwords-in-R-scripts/

本质上...

  1. 确保您有 enabled PowerShell execution .

  2. 将以下文本保存到名为 EncryptPassword.ps1 的文件中:

    # Create directory user profile if it doesn't already exist.
    $passwordDir = "$($env:USERPROFILE)\DPAPI\passwords\$($env:computername)"
    New-Item -ItemType Directory -Force -Path $passwordDir

    # Prompt for password to encrypt
    $account = Read-Host "Please enter a label for the text to encrypt. This will be how you refer to the password in R. eg. MYDB_MYUSER
    $SecurePassword = Read-Host -AsSecureString "Enter password" | convertfrom-securestring | out-file "$($passwordDir)\$($account).txt"

    # Check output and press any key to exit
    Write-Host "Press any key to continue..."
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
  3. 执行上面的脚本(右键单击 > 使用 PowerShell 运行),为密码提供一个有意义的名称,然后输入密码。您现在可以通过检查 %USERPROFILE%/DPAPI/passwords/[PC NAME]/[PASSWORD IDENTIFIER.txt] 中的文件来验证密码是否已加密

  4. 现在从 R 中运行以下代码(我将此函数保存在 R 脚本中,我在每个脚本的开头 source

    getEncryptedPassword <- function(credential_label, credential_path) {
    # if path not supplied, use %USER_PROFILE%\DPAPI\passwords\computername\credential_label.txt as default
    if (missing(credential_path)) {
    credential_path <- paste(Sys.getenv("USERPROFILE"), '\\DPAPI\\passwords\\', Sys.info()["nodename"], '\\', credential_label, '.txt', sep="")
    }
    # construct command
    command <- paste('powershell -command "$PlainPassword = Get-Content ', credential_path, '; $SecurePassword = ConvertTo-SecureString $PlainPassword; $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword); $UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR); echo $UnsecurePassword"', sep='')
    # execute powershell and return command
    return(system(command, intern=TRUE))
    }
  5. 现在,当您需要在 R 中提供密码时,您可以运行以下命令,而不是硬编码/提示输入密码:

    getEncryptedPassword("[PASSWORD IDENTIFIER]")

    例如,不运行 ROracle 命令:

    dbConnect(driver, "MYUSER", "MY PASSWORD", dbname="MYDB")

    您可以改为运行此命令(我在步骤 3 中提供的标识符是“MYUSER_MYDB”:

    dbConnect(driver, "MYUSER", getEncryptedPassword("MYUSER_MYDB"), dbname="MYDB")
  6. 您可以根据需要重复第 3 步设置多个密​​码,然后在第 5 步中使用正确的标识符调用它们即可。

关于r - 有没有与 SAS PWENCODE 类似的 R 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11478660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com