在Mac OS上加密RDP密码

在Mac OS上加密RDP密码,rdp,Rdp,我为一个生成并运行.RDP文件的项目窃取了以下代码: 写入一个RDP文件,运行它,然后删除它。这是一个运行用户默认RDP客户端的简单方法,在我的情况下,它将是: 代码通过从DLL调用过程来工作。这在Windows上有效,但由于以下DLL相关调用不跨平台,因此它不在Mac OS上构建: var ( dLLCrypt32 = syscall.NewLazyDLL("Crypt32.dll") dLLKernel32 = syscall.NewLazyDLL(

我为一个生成并运行.RDP文件的项目窃取了以下代码:

写入一个RDP文件,运行它,然后删除它。这是一个运行用户默认RDP客户端的简单方法,在我的情况下,它将是:

代码通过从DLL调用过程来工作。这在Windows上有效,但由于以下DLL相关调用不跨平台,因此它不在Mac OS上构建:

var (
    dLLCrypt32  = syscall.NewLazyDLL("Crypt32.dll")
    dLLKernel32 = syscall.NewLazyDLL("Kernel32.dll")

    procEncryptData = dLLCrypt32.NewProc("CryptProtectData") // LazyProc for accessing procedure
    procDecryptData = dLLCrypt32.NewProc("CryptUnprotectData")
    procLocalFree   = dLLKernel32.NewProc("LocalFree")
)

func encrypt(s string) ([]byte, error) {
    data := convertToUTF16LittleEndianBytes(s)
    var outBlob DataBlob
    // Call procedure to encrypt password.
    r, _, err := procEncryptData.Call(uintptr(unsafe.Pointer(newBlob(data))), 0, 0, 0, 0, 0, uintptr(unsafe.Pointer(&outBlob)))
    if r == 0 {
        return nil, err
    }
    defer procLocalFree.Call(uintptr(unsafe.Pointer(outBlob.pbData)))
    return outBlob.toByteArray(), nil
}
我知道RDP密码加密与Windows中的用户有关,但我不确定它在Mac OS上是如何工作的。值得注意的是,我上面提到的客户端不支持将密码保存到导出的RDP文件。我无法确认这是安全功能还是操作系统限制

  • 在Mac OS上的RDP文件中使用RDP密码是否可以正确加密?如果是,有什么例子说明如何做到这一点?(任何语言)

欢迎任何其他建议。正如您所看到的,在这个项目中,我并不局限于使用干净的解决方案。

我已经多次重读了这个问题,但不幸的是,未能从中收集问题的陈述。您想知道如何将引用的代码移植到MacOS吗?如果是,我会从开始。我发现了一个重复的帖子:关于向客户端添加配置条目,有一个相当全面的答案,但是关于生成实际的RDP文件的共识似乎是这是不可能的。我将保持此打开状态,以防有人确认/拒绝。@kostix我想在Mac OS上创建一个RDP文件,双击该文件可生成一个经过身份验证的RDP会话,即不必手动键入密码。我相信这将要求密码以Microsoft RDP Client for Mac所期望的方式进行加密。我认为您必须在问题中包含您的评论的第一句话。但是不清楚为什么这个问题被标记为
go
,因为在go中编程没有任何问题:如果我理解正确,基本上你想知道如何加密存储在RDP“连接”中的密码在某种程度上,兼容客户端可以读取该文件,而不需要调用Win32 API,因为这不是跨平台的。我认为这相当于找出
CryptProtectData
的确切功能,然后实现它。这个问题与任何编程语言无关。您可以考虑询问或打开(标记<代码> Windows < /代码>,<代码>安全< /代码>)。