- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Scribe Online API:https://dev.scribesoft.com/en/main/special_props/connection_properties.htm
他们对创建新连接时发送数据的加密要求有非常明确的说明,为方便起见,我在下面发布了这些说明。我正在使用 PHP 并努力让他们的 API 接受我的加密。到目前为止我的努力(在 PHP 中):
$props = [
'Url' => 'www.web.com',
'UserId' => 'abc123@hotmail.co.uk',
'Password' => 'abc123',
'SecurityToken' => '123',
'UseBulkApiRS' => 'false',
'UseBulkApiSYS' => 'false',
'RefreshMetaDataUponReconnect' => 'false',
'IncludeDeletedItemsSYS' => 'false',
];
$connector_props['connectorId'] = '8ADD76FC-525F-4B4B-B79E-945A6A762792';
$connector_props['connectorType'] = 'Salesforce';
$connector_props['color'] = '#FF00B050'; //Still Required but deprecated for Scribe Online.
$connector_props['name'] = 'Salesforce_TEST';
$connector_props['alias'] = 'Salesforce_TEST';
foreach($props as $prop_name => $val) {
//$iv = openssl_random_pseudo_bytes(16);
$iv = random_bytes(16);
$pbkdf2 = hash_pbkdf2('sha1', 'ORG_KEY', 'TIBCO_SALT_PUBLIC_KEY', 1000);
$aes = openssl_encrypt($val, 'AES-256-CBC', $pbkdf2, $options=0, $iv);
$base64_iv = base64_encode($iv);
$base64_val = base64_encode($aes);
$connector_props['properties'][] = [
'key' => $prop_name,
'value' => $base64_iv.$base64_val,
];
}
echo json_encode($connector_props, JSON_PRETTY_PRINT);
当我测试时,我将结果复制并粘贴到他们的 Swagger API 资源管理器页面并运行测试但返回错误 “遇到加密错误。请验证您的加密 key 并确保您遵循已发布的此 API 指南。” https://api.scribesoft.com/swagger/iframe#!/Connections/Connections_CreateConnection
API 调用需要在 JSON 中连同一些不需要加密的其他参数 - 所以我发送这样的内容,其中 XXX 是上面的加密值:
{
"name": "Salesforce 4.0",
"alias": "Salesforce 4",
"color": "#FF00B050",
"connectorId": "8add76fc-525f-4b4b-b79e-945a6a762792",
"connectorType": "Salesforce",
"properties": [
{
"key": "Url",
"value": "XXX"
},
{
"key": "UserId",
"value": "XXX"
},
{
"key": "Password",
"value": "XXX"
},
{
"key": "SecurityToken",
"value": "XXX"
},
{
"key": "UseBulkApiRS",
"value": "XXX"
},
{
"key": "UseBulkApiSYS",
"value": "XXX"
},
{
"key": "RefreshMetaDataUponReconnect",
"value": "XXX"
},
{
"key": "IncludeDeletedItemsSYS",
"value": "XXX"
},
],
}
他们确实有一个 Javascript 示例:https://gitlab.com/ScribeSoftware/webapi-full-reference-app/blob/master/app/Encryption.js ,但我真的不明白如何将其完全转换为 PHP 并获得 API 接受的相同结果。
有人知道我哪里出错了吗?
当您 POST 或 PUT 数据时,加密值必须采用 base 64 编码并附加到 base 64 编码的随机初始化向量。
加密连接属性值:
1) 将纯文本连接值转换为UTF-8编码。
2) 生成一个 16 字节的随机数组。这是 AES 对称 key 算法的初始化向量 (IV)。
3) 使用基于密码的 key 派生函数 2 (PBKDF2) 标准以及使用标准加密算法计算的基于散列的消息身份验证代码,从 API 访问 token key 和 TIBCO Scribe® API salt 值生成 1000 次迭代派生 key 1 (HMAC-SHA1)。
4) 使用 key 大小为 256、 block 大小为 128 和 PKCS7 填充的 AES 算法对 UTF-8 编码的连接属性值进行加密。
5) 将 IV 值和加密的连接属性值都转换为 Base 64 编码的文本字符串。
6) 将 Base 64 加密文本字符串附加到 Base 64 IV 文本字符串。
最佳答案
好吧,我终于解决了这个小问题。发生了一些事情。
@Sven - 您关于将加密别名更改为显式的建议很有帮助,例如AES-256-CBC 而不是 AES256。
其次 - 需要在 PHP 函数中设置几个额外的参数才能使其正常工作。
我将 OPENSSL_RAW_DATA 添加到 openssl_encrypt 函数,即
$aes = openssl_encrypt($val, 'AES-256-CBC', $pbkdf2, OPENSSL_RAW_DATA, $iv);
我还必须在 hash_pbkdf2 函数上将 key 长度设置为 256 并将 raw_output 设置为 TRUE(默认为 false),即
$pbkdf2 = hash_pbkdf2('sha1', 'ORG_KEY', 'TIBCO_SALT_PUBLIC_KEY', 1000, 256, true);
关于php - 如何使用 AES/Cryptography 与 Scribe Online API 和 PHP 加密文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55313996/
任务是编写代码,将敏感度标签应用于 SharePoint Online 文档库中的文档,而无需下载文件。 到目前为止,我已经探索了以下 API: SharePoint REST API v1 :可用于
期望的行为 将托管在 SharePoint Online 上的 Excel 文档嵌入到 HTML 页面中。 实际行为 嵌入加载,但是没有水平滚动条。 获取视口(viewport)右侧数据的唯一方法是单
我想在数据中心选择一个事件分区。通常我会使用以下语句: INVANTIVE> use 1552839 2> Exclamation itgendhb077: Error in Invantive Da
我正在使用 Azure Functions,特别是 PowerShell 脚本函数。我想知道如何使用连接到 SharePoint Online 的脚本。 要针对 SharePoint Online 运
我正在尝试使用 API 按姓名查询客户。具有非 ASCII 字符的名称(例如 민준 或 Włodarski)会导致查询失败。这是一个示例查询: SELECT * FROM Customer WHERE
我已经将一个SharePoint列表从2019年迁移到365年。该列表具有NINTEX形式,而该NINTEX形式具有较少的JavaScript文件。在SP Online中,NWF$().SPServi
我正在尝试在内存中生成 PDF 以将其发送到 WS。此 PDF 应在内存 (Stream) 和 Microsoft CRM“云”中的插件代码中创建。这可能吗? 在插件中(已经编码和部署)我有这行,第
当我使用 Invantive Data Hub 从多个 Exact Online 公司下载数据时,我得到了重复的行,而我希望每个公司只有一行。 我使用以下查询: select gla.code ,
我们刚刚上线 https://ecotaksen.be 。 Exact 上的查询和更新运行良好,但安装生产许可证后出现错误 itgenobr001:找不到客户端。。 我的数据容器规范是: 使用具有相
我在 Dynamics CRM Online 2015 中创建了一个插件,用于在 SharePoint Online 文档库中创建文件夹。该插件工作正常。但是,我想在 CRM 中的帐户名称更改时重命名
我正在关注 this blog在 SPFX 部分实现 fluentUI,但在执行“Gulp Build”时出现以下错误: Error - [tsc] node_modules/@fluentui/re
我能够在桌面 .Net 项目中通过 MSAL 检索和使用访问 token 。我可以成功检索 token ,并且它们在我的 Graph 调用中有效。 但是,尝试将访问 token 与 SharePoin
为了遵守法规,我尝试从我的一些部门下载采购发票文件(PDF 文件),将它们保存在磁盘上以供存档。 我使用 Invantive 查询工具来执行此操作。我想知道使用哪个表以及如何仅针对采购发票文档导出这些
我正在开发一个基于 Spring-MVC 的 Web 应用程序,该应用程序使用 Cometd 进行聊天。为了实时管理哪些用户在线,我们在用户在线时发送通知。因此,当窗口关闭时,不会出现通知,并且 30
我在 Visual Studio Online 上使用 GIT 进行源代码管理。我想将一个项目从我的个人 VSO 账户转移到我的企业 VSO 账户。例如。从 account1.visualstudio
当我关闭 Word Online 中的对话框时,我在控制台中收到以下消息: Unknown conversation Id. 我不是得到一个可以处理的代码,而是得到...... (macOS/Chro
短版:如何加载 PowerApps 中托管元数据字段的所有可用选项? 长版: 我有一个正常工作的 PowerApps 应用程序,但用户希望能够在离线时添加数据,并在再次在线时同步回来。官方 Power
我是 QuickBooks 的新手,我所有的搜索都导致了相互矛盾的答案。我真的需要知道这一点才能继续前进。 我们有一个本地应用程序(如果重要的话,旧版 MFC 应用程序)。我们的一些客户使用 Quic
这是我的代码,我尝试使用 countOnline 函数计算我们有多少在线用户。 我遇到错误“无法读取未定义的‘在线’属性”; function countOnline(usersObj) { le
如果我们有一个巨大的事实表并想要添加一个新维度,我们可以这样做: BEGIN TRANSACTION ALTER TABLE [GiantFactTable] ADD NewDimValueId IN
我是一名优秀的程序员,十分优秀!