我正在使用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 explorer页面,并运行测试,但返回错误“遇到加密错误。请验证您的加密密钥,并确保您遵守此API的发布准则。”https://api.scribesoft.com/swagger/iframe#!/连接/连接\u创建连接
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数据时,加密值必须是基64编码的,并附加到基64编码的随机初始化向量。
要加密Connection属性值:
1) 将纯文本连接值转换为UTF-8编码。
2) 生成一个16字节的随机数组。这是AES对称密钥算法的初始化向量(IV)。
3) 使用基于密码的密钥派生函数2(PBKDF2)标准,使用标准加密算法1(HMAC-SHA1)计算的基于散列的消息身份验证码,从API访问令牌密钥和TIBCO Scribe®API salt值生成1000次迭代派生密钥。
4)使用AES算法加密UTF-8编码的Connection属性值,使用256的密钥大小、128的块大小和PKCS7填充。
5)将IV值和加密的Connection属性值转换为Base 64编码的文本字符串。
6) 将Base 64加密文本字符串附加到Base 64 IV文本字符串。
好吧,我终于解决了这个小头痛。发生了一些事情。
@sven-您建议将加密别名更改为显式,例如AES-256-CBC而不是AES256。
其次,在PHP函数中需要设置一些额外的参数来实现这一点。
我将OPENSSL_原始_数据添加到OPENSSL_加密函数中,即
$aes=openssl_encrypt($val,'AES-256-CBC',$pbkdf2,OPENSSL_RAW_DATA,$iv);
我还必须将密钥长度设置为256,并在hash_pbkdf2函数上将raw_output为TRUE(默认为false)。
$pbkdf2 = hash_pbkdf2('sha1', 'ORG_KEY', 'TIBCO_SALT_PUBLIC_KEY', 1000, 256, true);
在本节中,我们将回顾以下安全问题: 生成随机数据 加密和解密 确认数据完整性 生成伪随机数据(Generating Pseudorandom Data) 伪随机数据在很多情况下都很有用。 例如,当通过电子邮件重置密码时, 您需要生成一个令牌,将其保存到数据库中,并通过电子邮件发送给最终用户, 这反过来又会允许他们证明该帐户的所有权。 这个令牌是独一无二且难以猜测的,否则攻击者可能会预测令牌的值并重
null 我很困惑,我应该选择哪种方法?我不知道这两种方法的利弊。
我试图在Android和PHP端使用AES加密/解密数据,并累犯空答案。 首先,我在Android中生成了对称密钥: 在服务器端,我试图解密数据。我可以解密(从RSA)秘密的AES密钥,并得到它的字符串表示。在客户端(Android)和服务器端(PHP)上是一样的。但是如何使用这个字符串AES密钥来解密数据呢?我尝试了这个(PHP): PHP中的结果: 怎么啦?
本文向大家介绍如何在PHP中使用AES加密算法加密数据,包括了如何在PHP中使用AES加密算法加密数据的使用技巧和注意事项,需要的朋友参考一下 在研究Discuz 的时候,发现Discuz有一套相当完美的加密算法(相对而言)。这个算法可以将数据加密后,储存起来,到需要用的时候,用之前加密的秘钥将之还原。 除了这个之外,还有AES这个算法能够将数据很好的加密起来,在传输过程中不容易被破解。 在PHP
我正在使用这样的代码来加密文件。 但是,尽管此代码成功加密。txt和。xml文件,它不适用于其他文件类型,例如。docx或图像文件格式。我可以对代码进行哪些更改以将功能扩展到所有此类文件类型?
我正在尝试构建一个程序,该程序接收一个文件(任意大小的EXE),对其进行加密并将其复制到一个结构中。然后稍后对其进行解密,并确保其与使用时相同。 我有一个艰难的时间加密,然后解密文件。它似乎没有正确加密,我不知道如何测试它。 以下是我的问题: 我在这里做错了什么? 是否有更好的库使用AES加密?或者我应该坚持openSSL 让我们说我想用另一个键说“你好世界”。我能不能用这个字符串作为加密算法的参