В приложении Einstein Playground, разработанном Salesforce Lab, я загрузил файл закрытого ключа службы платформы einstein с именем einstein_platform.pem, чтобы завершить настройку службы платформы einstein. И учетная запись была успешно настроена, и приложение работает правильно.

Теперь я пытаюсь получить токен доступа к сервису платформы einstein через код Apex, предоставленный Метаразум. И когда я пытаюсь получить VersionData файла с заголовком 'einstein_platform', который я загрузил ранее, я получил сформированные base64 данные большого двоичного объекта. . Но когда я собираюсь преобразовать эти данные BLOB-объекта в исходную строку, я получаю эту ошибку:

BLOB не является допустимой строкой UTF-8

ContentVersion base64Content = [SELECT Title, VersionData 
                                    FROM ContentVersion 
                                    where Title='einstein_platform'
                                    LIMIT 1];

String keyContents = base64Content.VersionData.tostring(); //this line is generating error

Позже я загрузил файл einstein_platform.pem с другим именем einstein_platform2.pem, затем проверил и обнаружил, что VersionData файла *' Файл с названием *einstein_platform'**, загруженный через приложение Einstein Playground, отличается от данных VersionData 'einstein_platform2' озаглавленный файл.

  1. Файл einstein_platform.pem, загруженный мной через приложение Einstein Playground и выдающий ошибку при преобразовании в исходную строку

  2. Файл einstein_platform2.pem, загруженный мной через вкладку "Файлы", и данные версии в порядке и могут быть преобразованы в исходную строку

2
Md. Abdur Razzak 8 Май 2020 в 10:39

2 ответа

Возможно, приложение под названием «Игровая площадка Эйнштейна» каким-то образом изменяет данные большого двоичного объекта в файле «einstein_platform.pem» после загрузки при загрузке через приложение. Загрузка того же файла вне приложения — это нормально.

обновление:

Теперь я загрузил файл «einstein_platform.pem», который я загрузил через приложение, и вижу, что файл поврежден.

Значит, приложение шифрует файл после его использования.

обновление:

Я обнаружил, что приложение фактически шифрует данные файла «einstein_platform.pem» с помощью SecretKey после загрузки. Секретный ключ можно найти в записи пользовательских настроек под названием «Настройки Einstein». Эти пользовательские настройки устанавливаются вместе с пакетом Einstein Playground.

Возможно, приложение делает это для безопасности закрытого ключа einstein_platform.pem.

Каким-то образом мне удалось расшифровать данные файла с помощью этого секретного ключа, используя алгоритм «AES128».

ContentVersion base64Content = [select Title, VersionData 
                                from ContentVersion 
                                where Title = 'einstein_platform' 
                                limit 1
                               ];
Blob secretKey = EncodingUtil.base64Decode('secret-key-found-in-the-custom-settings');  
Blob decryptedData = Crypto.decryptWithManagedIV('AES128', secretKey, base64Content.VersionData);

System.debug('decryptedData : ' + decryptedData.toString());
1
Md. Abdur Razzak 5 Июн 2020 в 17:39
У меня тоже было то же самое - мне пришлось скачать совершенно новый ключ
 – 
Matt Parker
5 Июн 2020 в 10:48

Будет ли работать вызов Apex EncodingUtil.base64Encode? Я использовал это для других проблем с преобразованием Blob в строку.

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restful_encodingUtil.htm

0
Brooks Johnson 8 Май 2020 в 14:50
1
Обычно работает Apex EncodingUtil.base64Encode. Я пытался, но это не работает для этого сценария, потому что данные файла повреждены, а большой двоичный объект не является допустимым большим двоичным объектом после загрузки через приложение.
 – 
Md. Abdur Razzak
8 Май 2020 в 16:24