Решение найдено.Ниже описан процесс шифрования Subversion в Windows.
- Subversion использует функцию Windows CryptProtectData для шифрования пароля.
- Subversion выполняет шифрование base64 зашифрованного пароля исохраняется в% APPDATA% \ Subversion \ auth \ svn.simple \
Попытка с Powershell:
Не удалось автоматизировать с PowerShell, причина: CryptProtectData принимает параметр «описание», который входит в зашифрованный пароль.Но функция Powershell ProtectedData не принимает параметр «description».
В результате, если я использую Powershell «ProtectedData», размер зашифрованных данных будет небольшим по сравнению с шифрованием Subversion.
Решение:
Поэтому я использовал код c ++ для выполнения точно такой же операции с точно такой же строкой «description» из исходного кода Subversion для шифрования пароля и сделал 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 хэш-значение 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)