svn encrypt/cache 手动输入用户密码
svn encrypt/cache user password manually
目标:当 运行 从命令提示符发出 svn 命令时避免 svn 身份验证提示。
我知道有一个选项可以将 --username & --password 传递给 svn 命令。但我不想这样做,因为 svn 操作是从批处理脚本完成的,我不想在批处理脚本中存储密码。
如果我们创建需要出现在 %APPDATA%\Subversion\auth\svn.simple\ 下的文件并更新它的内容。它是否逃避身份验证提示。可以这样做吗?
我看到有工具可以从 svn.simple 下的文件中解密密码。但是我如何加密密码并创建一个具有正确哈希名称的文件,以便 svn 使用它?
已找到解决方案。下面是windows.
中加密的颠覆过程
- Subversion 使用 Windows 的 CryptProtectData 函数来加密密码。
- Subversion 对加密密码进行 base64 编码并将其保存到 %APPDATA%\Subversion\auth\svn.simple\
尝试使用 Powershell:
使用 powershell 自动执行失败,原因是 CryptProtectData 使用 "description" 参数,该参数包含在加密密码中。但是 Powershell ProtectedData 函数不接受 "description" 参数。
因此,如果我使用 Powershell "ProtectedData" 与 Subversion 加密相比,加密数据的大小较小。
解法:
因此,我使用 C++ 代码使用来自 Subversion 源代码的完全相同的 "description" 字符串执行完全相同的操作来加密密码并对加密数据进行 base64 编码并且它有效。
# Below piece is taken from svn source code - file name: subversion/libsvn_subr/win32_crypto.c
CryptProtectData(
&blobin, // Input Data BLOB
L"auth_svn.simple.wincrypt", // Description String
NULL, NULL, NULL,
CRYPTPROTECT_UI_FORBIDDEN, // Constant to avoid prompting user
&blobout // Output Data BLOB
)
注意:我会在不久的将来尝试分享代码。
其他提示
CryptProtectData 函数创建一个会话密钥来执行加密。当要解密数据时,将再次派生会话密钥(我没有进一步讨论确切的密钥及其存储方式等)。因此,我们必须使用计划执行 svn 操作的同一用户帐户执行加密。
如前所述,SVN将详细信息缓存在%APPDATA%\Subversion\auth\svn.simple\下,文件名为"MD5 hash value of svn:realmstring".
# you can find the svn realm string, if you have already cached in the your account
# Up to my observations it is <svn url> <standard text>
<https://testsvn.svn.com:443> SVN AD-LDAP login (username, lowercase with domain)
目标:当 运行 从命令提示符发出 svn 命令时避免 svn 身份验证提示。
我知道有一个选项可以将 --username & --password 传递给 svn 命令。但我不想这样做,因为 svn 操作是从批处理脚本完成的,我不想在批处理脚本中存储密码。
如果我们创建需要出现在 %APPDATA%\Subversion\auth\svn.simple\ 下的文件并更新它的内容。它是否逃避身份验证提示。可以这样做吗?
我看到有工具可以从 svn.simple 下的文件中解密密码。但是我如何加密密码并创建一个具有正确哈希名称的文件,以便 svn 使用它?
已找到解决方案。下面是windows.
中加密的颠覆过程- Subversion 使用 Windows 的 CryptProtectData 函数来加密密码。
- Subversion 对加密密码进行 base64 编码并将其保存到 %APPDATA%\Subversion\auth\svn.simple\
尝试使用 Powershell:
使用 powershell 自动执行失败,原因是 CryptProtectData 使用 "description" 参数,该参数包含在加密密码中。但是 Powershell ProtectedData 函数不接受 "description" 参数。
因此,如果我使用 Powershell "ProtectedData" 与 Subversion 加密相比,加密数据的大小较小。
解法:
因此,我使用 C++ 代码使用来自 Subversion 源代码的完全相同的 "description" 字符串执行完全相同的操作来加密密码并对加密数据进行 base64 编码并且它有效。
# Below piece is taken from svn source code - file name: subversion/libsvn_subr/win32_crypto.c
CryptProtectData(
&blobin, // Input Data BLOB
L"auth_svn.simple.wincrypt", // Description String
NULL, NULL, NULL,
CRYPTPROTECT_UI_FORBIDDEN, // Constant to avoid prompting user
&blobout // Output Data BLOB
)
注意:我会在不久的将来尝试分享代码。
其他提示
CryptProtectData 函数创建一个会话密钥来执行加密。当要解密数据时,将再次派生会话密钥(我没有进一步讨论确切的密钥及其存储方式等)。因此,我们必须使用计划执行 svn 操作的同一用户帐户执行加密。
如前所述,SVN将详细信息缓存在%APPDATA%\Subversion\auth\svn.simple\下,文件名为"MD5 hash value of svn:realmstring".
# you can find the svn realm string, if you have already cached in the your account
# Up to my observations it is <svn url> <standard text>
<https://testsvn.svn.com:443> SVN AD-LDAP login (username, lowercase with domain)