【问题标题】:Problem to set correct (asked) key AES-256 encryption to a SOAP webservice为 SOAP Web 服务设置正确(询问)密钥 AES-256 加密的问题
【发布时间】:2021-06-17 21:34:42
【问题描述】:

我需要对 SOAP Web 界面的密码进行加密,但我不明白服务提供商的说明。它指出:

"公用密钥是通过创建今天日期+当前时间的字符串来生成的。例如,如果时间是下午13点,则创建2018-05-1513,如果时间是2018-05-159,则创建2018-05-159早上 9 点。时间是 UTC。然后使用 SHA256 算法对字符串进行哈希处理。"

这很简单,我使用以下代码 (PHP) 完成了它:

date_default_timezone_set("UTC");
$commonKey = date("Y-m-d");
$commonKey .= date("H");
$commonKey = hash('sha256', $commonKey, true);

用于进行加密的 AES 对象使用 CBC 配置为 128 位的块大小。

但是我不明白的部分来了:

创建 AES 对象时,会生成一个密钥(256 字节数组)和 IV(向量 128 位字节数组)。这些用于实际加密。一旦创建了对象,IV 就会被保存,并且您应该将密钥设置为最初从今天创建的 byteArray + 使用 SHA256 散列的实际小时数。 之后加密完成,chiffertext 和 IV 被发送到 web 服务

我不知道如何将密钥添加到公共密钥的 byteArray 中。而且我不知道网络服务如何解密我的密码。有没有人可以启发我?请注意,密钥是随机创建的,但我不知道如何处理它。

目前完整的代码如下所示:

//create commonkey
date_default_timezone_set("UTC");
$key = openssl_random_pseudo_bytes(32);

$commonKey = date("Y-m-d");
$commonKey .= date("H");
$commonKey = hash('sha256', $commonKey, true);

$cipher = "aes-128-cbc";

//encrypt password

$iv;

if (in_array($cipher, openssl_get_cipher_methods())){
    $ivlen = openssl_cipher_iv_length($cipher);
    $iv = openssl_random_pseudo_bytes($ivlen);
    $password = openssl_encrypt($password, $cipher, $commonKey, $options=0, $iv);
}

//check if user is allowed to login
if ($check->CheckUserLoginClubEncrypted($username, $password, $iv, $organizationalUnitID) 
!== false) {
    echo "Logged in";
    print_r($check->getResult());

} else {
    echo "Not logged in";
    print_r($check->getLastError());

}

【问题讨论】:

    标签: php encryption aes


    【解决方案1】:

    问题是密钥大小! :) 终于完成了!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2021-04-22
      • 1970-01-01
      • 2012-07-20
      • 1970-01-01
      • 2012-12-16
      • 2017-06-07
      相关资源
      最近更新 更多