2013-11-28 2 views
0

Существует старое веб-приложение, разработанное в vb.net и 2.0 Framework. Приложение считывает зашифрованную информацию о имени сервера sql, которые хранятся в реестре Windows. Когда дело доходит до этой строки кодаЗашифрованная/дешифрованная строка TripleDes имеет вопросительные знаки

ConnectionStr = Encoding.ASCII.GetString(plainText) 

я получаю знаки вопроса в строке

"P ?? ARSMEYVDE02"

и это должно быть

"PLWARSMEYVDE02"

Я попытался изменить кодировку на UTF8, по умолчанию или Unicode, но не повезло. Вот функция

Public Function HostLogOnParameters() As Boolean 
Try 
    Dim rk As RegistryKey = Registry.LocalMachine.OpenSubKey(ConfigurationSettings.AppSettings("Registry.LocalMachine") & "Host", False) 
    Dim ConnectionStr As String = rk.GetValue("1") 
    Dim initVector As String = rk.GetValue("2") 
    Dim strKey As String = rk.GetValue("3") 
    Dim dec As New Decryptor 
    dec.Decryptor(EncryptTransformer.EncryptionAlgorithm.TripleDes) 
    dec.IV = Convert.FromBase64String(initVector) 
    'Decrypt the string 
    Dim plainText As Byte() = dec.Decrypt(Convert.FromBase64String(ConnectionStr), Convert.FromBase64String(strKey)) 
    ConnectionStr = Encoding.ASCII.GetString(plainText) 
    ConnectionStr = ConnectionStr.Substring(1) 
    mstrServer = Left(ConnectionStr, InStr(ConnectionStr, "'") - 1) 
    ConnectionStr = ConnectionStr.Substring(mstrServer.Length + 3) 
    mstrDatabase = Left(ConnectionStr, InStr(ConnectionStr, "'") - 1) 
    ConnectionStr = ConnectionStr.Substring(mstrDatabase.Length + 3) 
    mstrUser = Left(ConnectionStr, InStr(ConnectionStr, "'") - 1) 
    ConnectionStr = ConnectionStr.Substring(mstrUser.Length + 3) 
    mstrPassvord = Left(ConnectionStr, InStr(ConnectionStr, "'") - 1) 
    Return True 
Catch ex As Exception 
    Return False 
End Try 
End Function 

Выход из plainText как hexadecimals.

2750CCD74152534D45595644455630325C44455656533032272C2745594372797374616C486F73744244272C274372797374616C486F737455736572272C273132337265706F7274696E6721402327

+0

@owlstead, не уверен если поймите. Вы хотите, чтобы я распечатывал результаты из этой строки. Dim plainText As Byte() = dec.Decrypt (Convert.FromBase64String (ConnectionStr), Convert.FromBase64String (strKey))? – jambis

+1

Да, именно это, [конвертировано в шестнадцатеричные] (http://social.msdn.microsoft.com/Forums/vstudio/en-US/fa53ce74-fd53-4d2a-bc05-619fb9d32481/convert-byte-array-to- hex-string? forum = vbgeneral), конечно, мой мозг лучше справляется с '20' вместо' 0010 0000' или простого символа "". –

+0

@owlstead, я добавил вывод в главный пост. – jambis

ответ

0

Это, вероятно, на латинском (ISO 8859-1), потому что тогда читает PÌ×ARSMEYVDEV02\DEVVS02 и Pixar, если, конечно, хорошо известная компания. Обратите внимание, что Windows-1252 является надмножеством этой кодировки символов.

+0

Решает ли ваш вопрос, ямбы? Если вы считаете, что это не так, вы можете попробовать другие кодировки символов. –

+0

Извините, я совершенно забыл об этом. Нет, это не решает мою проблему. Я попробовал ваше предложение, но каждый раз, когда я получаю грязное чтение. Это старое приложение, которое скоро будет выведено из эксплуатации, и это тестовая среда, поэтому я переместил строку подключения в файл web.config. Но в любом случае спасибо за вашу помощь! – jambis

+0

@ jambis ОК, стыдно, что это не решение, ваше скоро устаревшее приложение может потерять или развратить данные в этом случае. Тем более, что это нужно. Вы можете удалить вопрос, если считаете, что он никому не нужен (иначе он останется без ответа). –

Смежные вопросы