初始化KMS執行個體SDK用戶端後,您可以通過用戶端調用Sign和Verify介面進行簽名驗簽。本文介紹簽名驗簽的程式碼範例。
完整程式碼範例
調用Sign介面使用非對稱金鑰進行數位簽章,調用Verify介面使用非對稱金鑰驗證數位簽章。
源碼github地址:SignVerify.php
程式碼範例解析
初始化用戶端
關於初始化用戶端的詳細介紹,請參見初始化用戶端。
<?php
use AlibabaCloud\Dkms\Gcs\Sdk\Client as AlibabaCloudDkmsGcsSdkClient;
use AlibabaCloud\Dkms\Gcs\OpenApi\Models\Config as AlibabaCloudDkmsGcsOpenApiConfig;
function getDkmsGcsSdkClient()
{
global $clientKeyContent, $password, $endpoint;
// 構建KMS執行個體SDK Client配置
$config = new AlibabaCloudDkmsGcsOpenApiConfig();
//連線協定請設定為"https"。KMS執行個體服務僅允許通過HTTPS協議訪問。
$config->protocol = 'https';
//Client Key。
$config->clientKeyContent = $clientKeyContent;
//Client Key口令。
$config->password = $password;
//設定endpoint為<your KMS Instance Id>.cryptoservice.kms.aliyuncs.com。
$config->endpoint = $endpoint;
// 執行個體CA認證
$config->caFilePath = 'path/to/caCert.pem';
// 構建KMS執行個體SDK Client對象
return new AlibabaCloudDkmsGcsSdkClient($config);
}調用Sign介面使用非對稱金鑰進行數位簽章
/**
* 簽名樣本
* @param AlibabaCloudDkmsGcsSdkClient $client
* @param string $keyId
* @param string $message
* @param string $messageType
* @param string $algorithm
* @return SignatureContext
*/
function signSample($client, $keyId, $message, $messageType, $algorithm) {
// 構建簽章要求
$signRequest = new SignRequest();
$signRequest->keyId = $keyId;
$signRequest->algorithm = $algorithm;
$signRequest->message = AlibabaCloudTeaUtils::toBytes($message);
$signRequest->messageType = $messageType;
$runtimeOptions = new RuntimeOptions();
// 忽略認證
//$runtimeOptions->ignoreSSL = true;
try {
// 呼叫簽章介面進行簽名
$signResponse = $client->signWithOptions($signRequest, $runtimeOptions);
// 密鑰ID
$keyId = $signResponse->keyId;
// 簽名值
$signature = $signResponse->signature;
// 訊息類型
$messageType = $signResponse->messageType;
// 簽名演算法
$algorithm = $signResponse->algorithm;
var_dump($signResponse->toMap());
return new SignatureContext([
'keyId' => $keyId,
'signature' => $signature,
'messageType' => $messageType,
'algorithm' => $algorithm
]);
} catch (Exception $error) {
if ($error instanceof \AlibabaCloud\Tea\Exception\TeaError) {
var_dump($error->getErrorInfo());
}
var_dump($error->getMessage());
var_dump($error->getTraceAsString());
}
return null;
}調用Verify介面使用非對稱金鑰驗證數位簽章
/**
* 驗簽樣本
* @param AlibabaCloudDkmsGcsSdkClient $client
* @param string $message
* @param SignatureContext $ctx
* @return bool|null
*/
function verifySample($client, $message, $ctx) {
// 構建驗簽請求
$verifyRequest = new VerifyRequest();
$verifyRequest->keyId = $ctx->keyId;
$verifyRequest->signature = $ctx->signature;
$verifyRequest->message = AlibabaCloudTeaUtils::toBytes($message);
$verifyRequest->messageType = $ctx->messageType;
$verifyRequest->algorithm = $ctx->algorithm;
$runtimeOptions = new RuntimeOptions();
// 忽略服務端認證
//$runtimeOptions->ignoreSSL = true;
try {
// 調用驗簽介面進行驗簽
$verifyResponse = $client->verifyWithOptions($verifyRequest, $runtimeOptions);
// 驗簽結果
$value = $verifyResponse->value;
var_dump($verifyResponse->toMap());
return $value;
} catch (Exception $error) {
if ($error instanceof \AlibabaCloud\Tea\Exception\TeaError) {
var_dump($error->getErrorInfo());
}
var_dump($error->getMessage());
var_dump($error->getTraceAsString());
}
return null;
}