Miguel Altamirano Morales Ответов: 2

Расшифровка зашифрованного текста VB NET


Всем Добрый День. Я получаю ответ от службы REST и помещаю его в строковую переменную.

Теперь мне нужно изолировать определенные части всего текста, чтобы манипулировать ими отдельно; например, мне нужно расшифровать XML, взять дату штамповки цифрового документа и другие включенные части информации.

Я знаю, что могу использовать текстовые функции для извлечения нужной мне информации, но я думаю, что это должны быть лучшие и более эффективные способы выполнения этой работы.

Можно ли зарегистрировать информацию о строковой переменной в наборе данных, а затем взять ее оттуда ??. Или любое другое предложение ??.

Что я уже пробовал:

В то же время, просто чтобы не быть остановленным, я собираюсь попробовать использовать функции VB Net text, но я не чувствую себя комфортно с этим.

2 Ответов

Рейтинг:
8

Richard Deeming

Основываясь на коде в комментариях к решению 1, у вас есть формат JSON[^] строка, содержащая В base64[^] закодированный XML-файл.

Вам понадобится библиотека синтаксического анализа JSON - я использую JSON.NET[^].

Затем вам понадобится класс для представления объекта JSON. Это не совсем ясно, так как некоторые свойства null или пустые массивы. Но что-то вроде этого должно помочь вам начать:

Class InfoRecord
    Public Property uuid As Guid
    Public Property fechaCancelacion As DateTime
    Public Property estatus As Integer
    Public Property descripcion As String
    Public Property selloCFD As String
    Public Property tipoTimbre As String
    Public Property rfcEmisor As String
End Class

Class ErrorRecord
    Public Property codigo As Integer
    Public Property descripcion As String
    Public Property html As String
End Class

Class Wrapper
    Public Property [error] As ErrorRecord
    Public Property uuid As Guid
    Public Property timbresRestantes As String
    Public Property xml As String
    Public Property info As List(Of InfoRecord)
    
    Public ReadOnly Property XmlDocument As XDocument
        Get
            If String.IsNullOrEmpty(xml) Then Return Nothing
            
            Dim xmlBytes As Byte() = Convert.FromBase64String(xml)
            Dim decodedXml As String = System.Text.Encoding.Default.GetString(xmlBytes)
            
            Return XDocument.Parse(decodedXml)
        End Get
    End Property
End Class

Добавьте ссылку NuGet к JSON.NET, и импортировать Newtonsoft.Json пространство имен. Затем вы можете преобразовать свою строку в экземпляр Wrapper класс и доступ к XML-документу:
Dim data As Wrapper = JsonConvert.DeserializeObject(Of Wraper)(yourStringVariable)
Dim xml As XDocument = data.XmlDocument
If xml IsNot Nothing Then
    ... Do something with the XML here ...
End If


Miguel Altamirano Morales

Большое спасибо Ричард;

Чтобы сэкономить время, я исключил элементы "uuid", "xml" и "fechaTimbrado" из строкового ответа,который у меня есть (с помощью функции "Instr" VB), использовал System.Text.Asccii.decoding для декодирования xml-кода:

strXml = новая система.Text.ASCIIEncoding().GetString(Convert.FromBase64String(strWork_Xml))

Затем я конвертирую его в XML-файл, и он кажется правильным, так как я могу видеть его через Интернет.

У вас такой интересный ответ; Во всяком случае, мне потребуется некоторое время, чтобы изучить его глубже.

Я рад снова связаться с вами.

Рейтинг:
13

Afzaal Ahmad Zeeshan

Ваш вопрос касается расшифровки или лучшего способа извлечения содержимого из строки? Я буду следить за вопросами в вашем посте и постараюсь ответить на них,

Цитата:
Мне нужно расшифровать XML
У вас есть пароль или ключ для расшифровки сообщения? Если нет, то вопрос заканчивается здесь, потому что нет никакого разумного способа получить данные и значения обратно из зашифрованного сообщения.

Если да, то проверьте, какой метод шифрования был использован — чтобы гики были довольны, какой алгоритм шифрования был использован Затем вы можете использовать VB.NET варианты криптографических помощников для расшифровки сообщения.

Взгляните на образцы здесь в документации Microsoft, Шифрование и дешифрование строк в Visual Basic | Microsoft Docs[^]

Цитата:
Можно ли зарегистрировать информацию о строковой переменной в наборе данных, а затем взять ее оттуда ??. Или любое другое предложение ??.
Если эти данные похожи на пару ключ-значение, то да, вы можете хранить их в формате, который найдете полезным — HashSet может быть, для лучшей производительности? Но эта часть придет после того, как вы расшифруете текст. Кроме того, это будет возможно, если данные из REST API структурированы, как JSON, то вы можете сразу же разобрать их в объект и использовать. Попробуйте быть немного более конкретным в этой части вашего вопроса.


Miguel Altamirano Morales

Большое вам спасибо за ваш ответ, Афзаал; я постараюсь прояснить свой вопрос:

- Что я знаю о методе шифрования, так это то, что это Base64 (я не знаю, как это сказать по-английски). Это единственная ссылка, которая у меня есть.

- Я поймал ответ веб-службы в переменной строкового типа, и да, его содержимое находится в паре ключ-значение.

Я попытался использовать функцию ReadxML, используя строковую переменную в качестве параметра, чтобы поместить данные в набор данных, это было легко для меня в прошлом, но она рассматривала его как путь к адресу, поэтому это не сработало.

Это содержимое моей строковой переменной (я удалил чувствительные части, надеюсь, вы понимаете, и я надеюсь, что это может быть полезно).

{" &амп; vbLf &ампер; " ""ошибки"" : {" &амп; vbLf &ампер; " ""код"" : 0," &амп; vbLf &ампер; " ""descripcion"" : ""ОК""," &амп; vbLf &ампер; " ""ошибок"" : [ ]," &амп; vbLf &ампер; " ""HTML-код"" : ""0 OK""" & vbLf & " }," & vbLf & " ""uuid"" : ""8e1232b1-8b7d-45bc-b7c8-571970e93302""," & vbLf & " ""timbresRestantes"" : 0," & vbLf & " ""xml"" : ""PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48Q2FuY2VsYUNGRFJlc3BvbnNlIHhtbG5zPSJodHRwOi8vY2FuY2VsYWNmZC5zYXQuZ29iLm14Ij48Q2FuY2VsYUNGRFJlc3VsdCBGZWNoYT0iMjAxOC0wNi0yOFQwOTozNzo1OSIgUmZjRW1pc29yPSJNQUw3NDA0MjM0SzciPjxGb2xpb3M+PFVVSUQ+NjdFRkUwNDctQjg2Qi00QUExLThDMjQtODcxQ0EyNkE1NUY3PC9VVUlEPjxFc3RhdHVzVVVJRD4yMDE8L0VzdGF0dXNVVUlEPjwvRm9saW9zPjxTaWduYXR1cmUgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiIElkPSJTZWxsb1NBVCI+PFNpZ25lZEluZm8+PENhbm9uaWNhbGl6YXRpb25NZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8yMDAxL1JFQy14bWwtYzE0bi0yMDAxMDMxNSIvPjxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLXNoYTUxMiIvPjxSZWZlcmVuY2UgVVJJPSIiP
jxUcmFuc2Zvcm1zPjxUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk5L1JFQy14cGF0aC0xOTk5MTExNiI+PFhQYXRoPm5vdChhbmNlc3Rvci1vci1zZWxmOjoqW2xvY2FsLW5hbWUoKT0nU2lnbmF0dXJlJ10pPC9YUGF0aD48L1RyYW5zZm9ybT48L1RyYW5zZm9ybXM+PERpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTUxMiIvPjxEaWdlc3RWYWx1ZT4vQlJCTzVWZmx6OU40NVJScmZYemV6QTF5SDBSbHV6UldLL0FoSEx0cHRzVW5jVjhSNnlnbGUwZ0lteXFQdnl2blNJdXRmTkI4Q1c3RU9jd3RlaUEzdz09PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8+PFNpZ25hdHVyZVZhbHVlPlQ1YXR4TFF2V2JGaVBSSFl5a0YwcUxtWHlscXZMcW1GZEdNZGZnakpnY05sVWRBbFNRVElxS2VhQXQ2ek9ZZGVDLzYzNUNQT3hJMS9RZndJdFlTMExRPT08L1NpZ25hdHVyZVZhbHVlPjxLZXlJbmZvPjxLZXlOYW1lPjAwMDAxMDg4ODg4ODAwMDAwMDE2PC9LZXlOYW1lPjxLZXlWYWx1ZT48UlNBS2V5VmFsdWU+PE1vZHVsdXM+eG5MMnpEUHRINWpEc0FaRFRJZk1xYktHcnZlK0F0OEt5eDJFWnZiZlhicEs5dVZFeFdTODc0b01lbEZ6TnE2OS9ZcVNSZVQzSTdJOHdyK2pveTVPN291WkgrNEtXZElHcDRTaTZsSGUwa250eHpObXV1S3lPUGtKOXRNY250bkZtUTRiZnhGeGxnL1VkMmhDdHVveTNqMnhZa0lYdTVPNHBHTTk4Tno4cEFNPTwvTW9kdWx1cz48RXhwb25lbn
Q+QVFBQjwvRXhwb25lbnQ+PC9SU0FLZXlWYWx1ZT48L0tleVZhbHVlPjwvS2V5SW5mbz48L1NpZ25hdHVyZT48L0NhbmNlbGFDRkRSZXN1bHQ+PC9DYW5jZWxhQ0ZEUmVzcG9uc2U+""," & vbLf & " ""info"" : [ {" & vbLf & " ""uuid"" : ""67EFE047-B86B-4AA1-8C24-871CA26A55F7""," & vbLf & " ""fechaCancelacion"" : ""2018-06-28T09:37:59""," & vbLf & " ""estatus"" : 201," & vbLf & " ""descripcion"" : ""UUID Cancelado exitosamente""," & vbLf & " ""selloCFD"" : ""T5atxLQvWbFiPRHYykF0qLmXylqvLqmFdGMdfgjJgcNlUdAlSQTIqKeaAt6zOYdeC/635CPOxI1/QfwItYS0LQ==""," & vbLf & " ""tipoTimbre"" : ""CFDI""," & vbLf & " ""total"" : null," & vbLf & " ""serie"" : null," & vbLf & " ""folio"" : null," & vbLf & " ""rfcEmisor"" : ""XXXXXXXXXXXX""" & vbLf & " } ]" & vbLf & "}"
>

Спасибо еще раз.

Richard Deeming

Этот XML-код не зашифрован; он закодирован на базе 64.

Miguel Altamirano Morales

Спасибо, Ричард, прости за мою ошибку. Это первый раз, когда мне приходится иметь дело с такими вещами.

Richard Deeming

Не нужно извиняться. Только по долгому опыту я определил кодировку Base64. :)

Miguel Altamirano Morales

Замечательно !!. Я сохраню твой ответ, все, что ты мне сказал, мне действительно нужно знать такие вещи.

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Patrice T

Привет Мигель,
То, что вы вкладываете в свой вопрос, привлекает гораздо больше внимания, чем другие комментарии.
Поэтому, если вы включите свое объяснение и код в вопрос, это прояснит вопрос и привлечет больше внимания со стороны помощников.
Это повысит ваши шансы получить полезные ответы

Miguel Altamirano Morales

Я полагаю, вы говорите мне это относительно будущих вопросов, не так ли?, потому что на этот вопрос уже дан ответ. Или вы хотите, чтобы я немного прояснил это ?

И да, я постараюсь прояснить свои дальнейшие вопросы. Спасибо за ваше наблюдение Ppolymorphe.

Patrice T

Если на ваш вопрос будет дан ответ, просто сохраните это для будущих вопросов

Miguel Altamirano Morales

Большое тебе спасибо Амиго