После ответа на этот вопрос я смог воссоздать функцию DecryptByPassPhrase, равную SQL. Сейчас я пытаюсь выполнить функцию EncryptByPassPhrase.
У нас есть другая версия SQL на другом сервере, которую нельзя обновить до одной и той же версии одновременно, поэтому мы хотим создать нашу функцию c# ( с SQL CLR).
Мне нужно кодировать с помощью SHA1 (например, SQL 2012), поскольку SQL на другом сервере может быть еще не обновлен до 2017 года
Здесь мой c#, функция скомпилирована, но я не могу расшифровать ее с помощью другой моей c# функции (которая является точно функцией ответа на другой вопрос)
int keySize = 16;
var cryptoAlgo = TripleDES.Create();
cryptoAlgo.Padding = PaddingMode.PKCS7;
cryptoAlgo.Mode = CipherMode.CBC;
cryptoAlgo.GenerateIV(); //cryptoAlgo.IV = StringToByteArray(value.Substring(8, 16));
//cryptoAlgo.IV = StringToByteArray("7854E155CEE338D5");
var valueInByte = Encoding.Unicode.GetBytes(value); //UTF8Encoding.UTF8.GetBytes(value); //encrypted = StringToByteArray(value.Substring(24));
byte[] passwordBytes = Encoding.Unicode.GetBytes(password);
var hashAlgo = SHA1.Create();
hashAlgo.TransformFinalBlock(passwordBytes, 0, passwordBytes.Length);
cryptoAlgo.Key = hashAlgo.Hash.Take(keySize).ToArray();
byte[] encrypted = cryptoAlgo.CreateEncryptor().TransformFinalBlock(valueInByte, 0, valueInByte.Length);
//byte[] encryptedData = encrypted.Skip(8).ToArray();
//bool isUtf16 = (Array.IndexOf(encryptedData, (byte)0) != -1);
//string encryptedText = (isUtf16 ? Encoding.Unicode.GetString(encryptedData) : Encoding.UTF8.GetString(encryptedData));
return new SqlString(encryptedText);
//return new SqlString(encryptedText);
//return Convert.ToBase64String(encrypted, 0, encrypted.Length);
//return Convert.ToBase64String(encryptedData, 0, encryptedData.Length);
//return "0x01000000" + Convert.ToBase64String(cryptoAlgo.IV, 0, cryptoAlgo.IV.Length) + Convert.ToBase64String(encrypted, 0, encrypted.Length);
//return "0x01000000" + Convert.ToBase64String(encryptedData, 0, encryptedData.Length);
там много разного возврата, который я пробовал (они в комментарии). Я заметил, что SQL возвращает «0x01000000», и я предполагаю, что следующие 16 символов - это IV, поэтому я попытался добавить их, но безуспешно