你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

CryptographyClient 类

  • java.lang.Object
    • com.azure.security.keyvault.keys.cryptography.CryptographyClient

public class CryptographyClient

CryptographyClient提供同步方法,以使用非对称密钥和对称密钥执行加密操作。 客户端支持使用配置的密钥加密、解密、包装密钥、解包密钥、签名和验证操作。

入门

若要与 Azure 密钥保管库 服务交互,需要创建 类的CryptographyClient实例、保管库 URL 和凭据对象。

本文档中显示的示例使用名为 DefaultAzureCredential 的凭据对象进行身份验证,该对象适用于大多数方案,包括本地开发和生产环境。 此外,建议在生产环境中使用 托管标识 进行身份验证。 可以在 Azure 标识文档中找到有关不同身份验证方式及其相应凭据类型的详细信息。

示例:构造同步加密客户端

下面的代码示例演示如何创建 , CryptographyClient使用 CryptographyClientBuilder 进行配置。

CryptographyClient cryptographyClient = new CryptographyClientBuilder()
     .keyIdentifier("<your-key-id>")
     .credential(new DefaultAzureCredentialBuilder().build())
     .buildClient();
JsonWebKey jsonWebKey = new JsonWebKey().setId("SampleJsonWebKey");
 CryptographyClient cryptographyClient = new CryptographyClientBuilder()
     .jsonWebKey(jsonWebKey)
     .buildClient();

对数据进行加密

CryptographyClient可用于加密数据。

代码示例:

以下代码示例演示如何使用 encrypt(EncryptionAlgorithm algorithm, byte[] plaintext) API 同步加密数据。

byte[] plaintext = new byte[100];
 new Random(0x1234567L).nextBytes(plaintext);

 EncryptResult encryptResult = cryptographyClient.encrypt(EncryptionAlgorithm.RSA_OAEP, plaintext);

 System.out.printf("Received encrypted content of length: %d, with algorithm: %s.%n",
     encryptResult.getCipherText().length, encryptResult.getAlgorithm());

注意: 有关异步示例,请参阅 CryptographyAsyncClient


解密数据

CryptographyClient可用于解密数据。

代码示例:

以下代码示例演示如何使用 decrypt(EncryptionAlgorithm algorithm, byte[] ciphertext) API 同步解密数据。

byte[] ciphertext = new byte[100];
 new Random(0x1234567L).nextBytes(ciphertext);

 DecryptResult decryptResult = cryptographyClient.decrypt(EncryptionAlgorithm.RSA_OAEP, ciphertext);

 System.out.printf("Received decrypted content of length: %d.%n", decryptResult.getPlainText().length);

注意: 有关异步示例,请参阅 CryptographyAsyncClient

方法摘要

修饰符和类型 方法和描述
DecryptResult decrypt(DecryptParameters decryptParameters, Context context)

使用配置的密钥和指定的算法解密单个加密数据块。

DecryptResult decrypt(EncryptionAlgorithm algorithm, byte[] ciphertext)

使用配置的密钥和指定的算法解密单个加密数据块。

DecryptResult decrypt(EncryptionAlgorithm algorithm, byte[] ciphertext, Context context)

使用配置的密钥和指定的算法解密单个加密数据块。

EncryptResult encrypt(EncryptParameters encryptParameters, Context context)

使用配置的密钥加密任意字节序列。

EncryptResult encrypt(EncryptionAlgorithm algorithm, byte[] plaintext)

使用配置的密钥加密任意字节序列。

EncryptResult encrypt(EncryptionAlgorithm algorithm, byte[] plaintext, Context context)

使用配置的密钥加密任意字节序列。

KeyVaultKey getKey()

获取已配置密钥的公共部分。

Response<KeyVaultKey> getKeyWithResponse(Context context)

获取已配置密钥的公共部分。

SignResult sign(SignatureAlgorithm algorithm, byte[] digest)

使用配置的密钥从摘要创建签名。

SignResult sign(SignatureAlgorithm algorithm, byte[] digest, Context context)

使用配置的密钥从摘要创建签名。

SignResult signData(SignatureAlgorithm algorithm, byte[] data)

使用配置的密钥基于原始数据创建签名。

SignResult signData(SignatureAlgorithm algorithm, byte[] data, Context context)

使用配置的密钥基于原始数据创建签名。

UnwrapResult unwrapKey(KeyWrapAlgorithm algorithm, byte[] encryptedKey)

使用最初用于包装该密钥的已配置密钥解包对称密钥。

UnwrapResult unwrapKey(KeyWrapAlgorithm algorithm, byte[] encryptedKey, Context context)

使用最初用于包装该密钥的已配置密钥解包对称密钥。

VerifyResult verify(SignatureAlgorithm algorithm, byte[] digest, byte[] signature)

使用配置的密钥验证签名。

VerifyResult verify(SignatureAlgorithm algorithm, byte[] digest, byte[] signature, Context context)

使用配置的密钥验证签名。

VerifyResult verifyData(SignatureAlgorithm algorithm, byte[] data, byte[] signature)

使用配置的密钥针对原始数据验证签名。

VerifyResult verifyData(SignatureAlgorithm algorithm, byte[] data, byte[] signature, Context context)

使用配置的密钥针对原始数据验证签名。

WrapResult wrapKey(KeyWrapAlgorithm algorithm, byte[] key)

使用配置的密钥包装对称密钥。

WrapResult wrapKey(KeyWrapAlgorithm algorithm, byte[] key, Context context)

使用配置的密钥包装对称密钥。

方法继承自 java.lang.Object

方法详细信息

decrypt

public DecryptResult decrypt(DecryptParameters decryptParameters, Context context)

使用配置的密钥和指定的算法解密单个加密数据块。 请注意,只能解密单个数据块,此块的大小取决于目标密钥和要使用的算法。 非对称密钥和对称密钥都支持解密操作。 此操作需要 keys/decrypt 非本地操作的权限。

指示 EncryptionAlgorithm 用于解密指定加密内容的算法类型。 非对称键的可能值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括:A128CBC、、A128CBCPADA128CBC_HS256A128GCMA192CBCA192CBC_HS384A192CBCPAD、、A192GCMA256CBCA256CBCPADA256CBC_HS512 和 。A256GCM

示例代码

当收到响应时,解密加密内容会输出解密的内容详细信息。

byte[] myCiphertext = new byte[100];
 new Random(0x1234567L).nextBytes(myCiphertext);
 byte[] iv = {
     (byte) 0x1a, (byte) 0xf3, (byte) 0x8c, (byte) 0x2d, (byte) 0xc2, (byte) 0xb9, (byte) 0x6f, (byte) 0xfd,
     (byte) 0xd8, (byte) 0x66, (byte) 0x94, (byte) 0x09, (byte) 0x23, (byte) 0x41, (byte) 0xbc, (byte) 0x04
 };

 DecryptParameters decryptParameters = DecryptParameters.createA128CbcParameters(myCiphertext, iv);
 DecryptResult decryptedResult = cryptographyClient.decrypt(decryptParameters, new Context("key1", "value1"));

 System.out.printf("Received decrypted content of length: %d.%n", decryptedResult.getPlainText().length);

Parameters:

decryptParameters - 在解密操作中使用的参数。 例如,Microsoft 建议不要在不首先使用 HMAC 确保密文完整性的情况下使用 CBC。 有关详细信息,请参阅 使用填充进行 CBC 模式对称解密的计时漏洞
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

DecryptResult包含getPlainText()解密内容的 。

decrypt

public DecryptResult decrypt(EncryptionAlgorithm algorithm, byte[] ciphertext)

使用配置的密钥和指定的算法解密单个加密数据块。 请注意,只能解密单个数据块,此块的大小取决于目标密钥和要使用的算法。 非对称密钥和对称密钥都支持解密操作。 此操作需要 keys/decrypt 非本地操作的权限。

指示 EncryptionAlgorithm 用于解密指定加密内容的算法类型。 非对称键的可能值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括:A128CBC、、A128CBCPADA128CBC_HS256A128GCMA192CBCA192CBC_HS384A192CBCPAD、、A192GCMA256CBCA256CBCPADA256CBC_HS512 和 。A256GCM

示例代码

当收到响应时,解密加密内容会输出解密的内容详细信息。

byte[] ciphertext = new byte[100];
 new Random(0x1234567L).nextBytes(ciphertext);

 DecryptResult decryptResult = cryptographyClient.decrypt(EncryptionAlgorithm.RSA_OAEP, ciphertext);

 System.out.printf("Received decrypted content of length: %d.%n", decryptResult.getPlainText().length);

Parameters:

algorithm - 用于解密的算法。
ciphertext - 要解密的内容。 例如,Microsoft 建议不要在不首先使用 HMAC 确保密文完整性的情况下使用 CBC。 有关详细信息,请参阅 使用填充进行 CBC 模式对称解密的计时漏洞

Returns:

DecryptResult包含getPlainText()解密内容的 。

decrypt

public DecryptResult decrypt(EncryptionAlgorithm algorithm, byte[] ciphertext, Context context)

使用配置的密钥和指定的算法解密单个加密数据块。 请注意,只能解密单个数据块,此块的大小取决于目标密钥和要使用的算法。 非对称密钥和对称密钥都支持解密操作。 此操作需要 keys/decrypt 非本地操作的权限。

指示 EncryptionAlgorithm 用于解密指定加密内容的算法类型。 非对称键的可能值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括:A128CBC、、A128CBCPADA128CBC_HS256A128GCMA192CBCA192CBC_HS384A192CBCPAD、、A192GCMA256CBCA256CBCPADA256CBC_HS512 和 。A256GCM

示例代码

当收到响应时,解密加密的内容会输出解密的内容详细信息。

byte[] ciphertextToDecrypt = new byte[100];
 new Random(0x1234567L).nextBytes(ciphertextToDecrypt);

 DecryptResult decryptionResult = cryptographyClient.decrypt(EncryptionAlgorithm.RSA_OAEP, ciphertextToDecrypt,
     new Context("key1", "value1"));

 System.out.printf("Received decrypted content of length: %d.%n", decryptionResult.getPlainText().length);

Parameters:

algorithm - 用于解密的算法。
ciphertext - 要解密的内容。 例如,Microsoft 建议不要在未首先使用 HMAC 确保密码文本的完整性的情况下使用 CBC。 有关详细信息,请参阅 使用填充对 CBC 模式对称解密的漏洞进行计时
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

getPlainText()包含DecryptResult解密内容的 。

encrypt

public EncryptResult encrypt(EncryptParameters encryptParameters, Context context)

使用配置的密钥加密任意字节序列。 请注意,加密操作仅支持单个数据块,其大小取决于目标密钥和要使用的加密算法。 对称密钥和非对称密钥都支持加密操作。 对于非对称密钥,密钥的公共部分用于加密。 此操作需要 keys/encrypt 非本地操作的权限。

指示 EncryptionAlgorithm 用于加密指定的 plaintext的算法类型。 非对称键的可能值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括:A128CBC、、A128CBCPADA128CBC_HS256A128GCMA192CBCA192CBC_HS384A192CBCPAD、、A192GCMA256CBCA256CBCPADA256CBC_HS512 和 。A256GCM

示例代码

当收到响应时,加密内容会输出加密的内容详细信息。

byte[] myPlaintext = new byte[100];
 new Random(0x1234567L).nextBytes(myPlaintext);
 byte[] iv = {
     (byte) 0x1a, (byte) 0xf3, (byte) 0x8c, (byte) 0x2d, (byte) 0xc2, (byte) 0xb9, (byte) 0x6f, (byte) 0xfd,
     (byte) 0xd8, (byte) 0x66, (byte) 0x94, (byte) 0x09, (byte) 0x23, (byte) 0x41, (byte) 0xbc, (byte) 0x04
 };

 EncryptParameters encryptParameters = EncryptParameters.createA128CbcParameters(myPlaintext, iv);
 EncryptResult encryptedResult = cryptographyClient.encrypt(encryptParameters, new Context("key1", "value1"));

 System.out.printf("Received encrypted content of length: %d, with algorithm: %s.%n",
     encryptedResult.getCipherText().length, encryptedResult.getAlgorithm());

Parameters:

encryptParameters - 在加密操作中使用的参数。
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

包含EncryptResultgetCipherText()加密内容的 。

encrypt

public EncryptResult encrypt(EncryptionAlgorithm algorithm, byte[] plaintext)

使用配置的密钥加密任意字节序列。 请注意,加密操作仅支持单个数据块,其大小取决于目标密钥和要使用的加密算法。 对称密钥和非对称密钥都支持加密操作。 对于非对称密钥,密钥的公共部分用于加密。 此操作需要 keys/encrypt 非本地操作的权限。

指示 EncryptionAlgorithm 用于加密指定的 plaintext的算法类型。 非对称键的可能值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括:A128CBC、、A128CBCPADA128CBC_HS256A128GCMA192CBCA192CBC_HS384A192CBCPAD、、A192GCMA256CBCA256CBCPADA256CBC_HS512 和 。A256GCM

示例代码

在收到响应时加密内容并输出加密的内容详细信息。

byte[] plaintext = new byte[100];
 new Random(0x1234567L).nextBytes(plaintext);

 EncryptResult encryptResult = cryptographyClient.encrypt(EncryptionAlgorithm.RSA_OAEP, plaintext);

 System.out.printf("Received encrypted content of length: %d, with algorithm: %s.%n",
     encryptResult.getCipherText().length, encryptResult.getAlgorithm());

Parameters:

algorithm - 要用于加密的算法。
plaintext - 要加密的内容。

Returns:

包含EncryptResultgetCipherText()加密内容的 。

encrypt

public EncryptResult encrypt(EncryptionAlgorithm algorithm, byte[] plaintext, Context context)

使用配置的密钥加密任意字节序列。 请注意,加密操作仅支持单个数据块,其大小取决于目标密钥和要使用的加密算法。 对称密钥和非对称密钥都支持加密操作。 对于非对称密钥,密钥的公共部分用于加密。 此操作需要 keys/encrypt 非本地操作的权限。

指示 EncryptionAlgorithm 用于加密指定的 plaintext的算法类型。 非对称键的可能值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括:A128CBC、、A128CBCPADA128CBC_HS256A128GCMA192CBCA192CBC_HS384A192CBCPAD、、A192GCMA256CBCA256CBCPADA256CBC_HS512 和 。A256GCM

示例代码

当收到响应时,加密内容会输出加密的内容详细信息。

byte[] plaintextToEncrypt = new byte[100];
 new Random(0x1234567L).nextBytes(plaintextToEncrypt);

 EncryptResult encryptionResult = cryptographyClient.encrypt(EncryptionAlgorithm.RSA_OAEP, plaintextToEncrypt,
     new Context("key1", "value1"));

 System.out.printf("Received encrypted content of length: %d, with algorithm: %s.%n",
     encryptionResult.getCipherText().length, encryptionResult.getAlgorithm());

Parameters:

algorithm - 要用于加密的算法。
plaintext - 要加密的内容。
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

包含EncryptResultgetCipherText()加密内容的 。

getKey

public KeyVaultKey getKey()

获取已配置密钥的公共部分。 获取密钥操作适用于所有密钥类型,并且需要 keys/get 非本地操作的权限。

示例代码

获取客户端中配置的密钥,并在收到响应时输出返回的密钥详细信息。

KeyVaultKey key = cryptographyClient.getKey();

 System.out.printf("Key returned with name: %s and id: %s.%n", key.getName(), key.getId());

Returns:

一个 Mono 包含请求的 KeyVaultKey

getKeyWithResponse

public Response getKeyWithResponse(Context context)

获取已配置密钥的公共部分。 获取密钥操作适用于所有密钥类型,并且需要 keys/get 非本地操作的权限。

示例代码

获取客户端中配置的密钥,并在收到响应时输出返回的密钥详细信息。

KeyVaultKey keyWithVersion = cryptographyClient.getKeyWithResponse(new Context("key1", "value1")).getValue();

 System.out.printf("Key is returned with name: %s and id %s.%n", keyWithVersion.getName(),
     keyWithVersion.getId());

Parameters:

context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

一个 MonoResponse<T>value ,它包含请求的 。KeyVaultKey

sign

public SignResult sign(SignatureAlgorithm algorithm, byte[] digest)

使用配置的密钥从摘要创建签名。 签名操作支持非对称密钥和对称密钥。 此操作需要 keys/sign 非本地操作的权限。

SignatureAlgorithm指示用于从摘要创建签名的算法类型。 可能的值包括:ES256、、ES384ES512ES256KPS256RS384RS512RS256RS384、 和 RS512

示例代码

在收到响应时,摘要会打印出签名详细信息。

byte[] data = new byte[100];
 new Random(0x1234567L).nextBytes(data);
 MessageDigest md = MessageDigest.getInstance("SHA-256");
 md.update(data);
 byte[] digest = md.digest();

 SignResult signResult = cryptographyClient.sign(SignatureAlgorithm.ES256, digest);

 System.out.printf("Received signature of length: %d, with algorithm: %s.%n", signResult.getSignature().length,
     signResult.getAlgorithm());

Parameters:

algorithm - 用于签名的算法。
digest - 要从中创建签名的内容。

Returns:

一个 SignResult 包含 getSignature() 已创建签名的 。

sign

public SignResult sign(SignatureAlgorithm algorithm, byte[] digest, Context context)

使用配置的密钥从摘要创建签名。 签名操作支持非对称密钥和对称密钥。 此操作需要 keys/sign 非本地操作的权限。

SignatureAlgorithm指示用于从摘要创建签名的算法类型。 可能的值包括:ES256、、ES384ES512ES256KPS256RS384RS512RS256RS384、 和 RS512

示例代码

在收到响应时,摘要会打印出签名详细信息。

byte[] dataToVerify = new byte[100];
 new Random(0x1234567L).nextBytes(dataToVerify);
 MessageDigest myMessageDigest = MessageDigest.getInstance("SHA-256");
 myMessageDigest.update(dataToVerify);
 byte[] digestContent = myMessageDigest.digest();

 SignResult signResponse = cryptographyClient.sign(SignatureAlgorithm.ES256, digestContent,
     new Context("key1", "value1"));

 System.out.printf("Received signature of length: %d, with algorithm: %s.%n", signResponse.getSignature().length,
     signResponse.getAlgorithm());

Parameters:

algorithm - 用于签名的算法。
digest - 要从中创建签名的内容。
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

一个 SignResult 包含 getSignature() 已创建签名的 。

signData

public SignResult signData(SignatureAlgorithm algorithm, byte[] data)

使用配置的密钥基于原始数据创建签名。 签名数据操作支持非对称密钥和对称密钥。 此操作需要 keys/sign 非本地操作的权限。

SignatureAlgorithm指示用于对摘要进行签名的算法类型。 可能的值包括:ES256、、ES384ES512ES256KPS256RS384RS512RS256RS384、 和 RS512

示例代码

在收到响应时,对原始数据进行签名会输出签名详细信息。

byte[] data = new byte[100];
 new Random(0x1234567L).nextBytes(data);

 SignResult signResult = cryptographyClient.sign(SignatureAlgorithm.ES256, data);

 System.out.printf("Received signature of length: %d, with algorithm: %s.%n", signResult.getSignature().length,
     signResult.getAlgorithm());

Parameters:

algorithm - 用于签名的算法。
data - 要从中创建签名的内容。

Returns:

一个 SignResult 包含 getSignature() 已创建签名的 。

signData

public SignResult signData(SignatureAlgorithm algorithm, byte[] data, Context context)

使用配置的密钥基于原始数据创建签名。 签名数据操作支持非对称密钥和对称密钥。 此操作需要 keys/sign 非本地操作的权限。

SignatureAlgorithm指示用于对摘要进行签名的算法类型。 可能的值包括:ES256、、ES384ES512ES256KPS256RS384RS512RS256RS384、 和 RS512

示例代码

在收到响应时,对原始数据进行签名会输出签名详细信息。

byte[] plainTextData = new byte[100];
 new Random(0x1234567L).nextBytes(plainTextData);

 SignResult signingResult = cryptographyClient.sign(SignatureAlgorithm.ES256, plainTextData);

 System.out.printf("Received signature of length: %d, with algorithm: %s.%n",
     signingResult.getSignature().length, new Context("key1", "value1"));

Parameters:

algorithm - 用于签名的算法。
data - 要从中创建签名的内容。
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

一个 SignResult 包含 getSignature() 已创建签名的 。

unwrapKey

public UnwrapResult unwrapKey(KeyWrapAlgorithm algorithm, byte[] encryptedKey)

使用最初用于包装该密钥的已配置密钥解包对称密钥。 此操作与换行操作相反。 解包操作支持解包的非对称密钥和对称密钥。 此操作需要 keys/unwrapKey 非本地操作的权限。

KeyWrapAlgorithm指示用于解包指定的加密密钥内容的算法类型。 非对称键的可能值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括: A128KWA192KWA256KW

示例代码

在收到响应时,展开密钥内容会输出未包装的密钥详细信息。

byte[] keyContent = new byte[100];
 new Random(0x1234567L).nextBytes(keyContent);

 WrapResult wrapKeyResult = cryptographyClient.wrapKey(KeyWrapAlgorithm.RSA_OAEP, keyContent,
     new Context("key1", "value1"));
 UnwrapResult unwrapResult = cryptographyClient.unwrapKey(KeyWrapAlgorithm.RSA_OAEP,
     wrapKeyResult.getEncryptedKey());

 System.out.printf("Received key of length %d", unwrapResult.getKey().length);

Parameters:

algorithm - 用于包装密钥的加密算法。
encryptedKey - 要解包的加密密钥内容。

Returns:

一个 UnwrapResult ,它 getKey() 包含未包装的密钥结果。

unwrapKey

public UnwrapResult unwrapKey(KeyWrapAlgorithm algorithm, byte[] encryptedKey, Context context)

使用最初用于包装该密钥的已配置密钥解包对称密钥。 此操作与换行操作相反。 解包操作支持解包的非对称密钥和对称密钥。 此操作需要 keys/unwrapKey 非本地操作的权限。

KeyWrapAlgorithm指示用于解包指定的加密密钥内容的算法类型。 非对称键的可能值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括: A128KWA192KWA256KW

示例代码

在收到响应时,展开密钥内容会输出未包装的密钥详细信息。

byte[] keyContentToWrap = new byte[100];
 new Random(0x1234567L).nextBytes(keyContentToWrap);
 Context context = new Context("key1", "value1");

 WrapResult wrapKeyContentResult =
     cryptographyClient.wrapKey(KeyWrapAlgorithm.RSA_OAEP, keyContentToWrap, context);
 UnwrapResult unwrapKeyResponse =
     cryptographyClient.unwrapKey(KeyWrapAlgorithm.RSA_OAEP, wrapKeyContentResult.getEncryptedKey(), context);

 System.out.printf("Received key of length %d", unwrapKeyResponse.getKey().length);

Parameters:

algorithm - 用于包装密钥的加密算法。
encryptedKey - 要解包的加密密钥内容。
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

一个 UnwrapResult ,它 getKey() 包含未包装的密钥结果。

verify

public VerifyResult verify(SignatureAlgorithm algorithm, byte[] digest, byte[] signature)

使用配置的密钥验证签名。 验证操作支持对称密钥和非对称密钥。 在非对称密钥的情况下,密钥的公共部分用于验证签名。 此操作需要 keys/verify 非本地操作的权限。

SignatureAlgorithm指示用于验证签名的算法类型。 可能的值包括:ES256、、ES384ES512ES256KPS256RS384RS512RS256RS384、 和 RS512

示例代码

在收到响应时,根据指定的摘要验证签名会输出验证详细信息。

byte[] myData = new byte[100];
 new Random(0x1234567L).nextBytes(myData);
 MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
 messageDigest.update(myData);
 byte[] myDigest = messageDigest.digest();

 // A signature can be obtained from the SignResult returned by the CryptographyClient.sign() operation.
 VerifyResult verifyResult = cryptographyClient.verify(SignatureAlgorithm.ES256, myDigest, signature);

 System.out.printf("Verification status: %s.%n", verifyResult.isValid());

Parameters:

algorithm - 用于签名的算法。
digest - 从中创建签名的内容。
signature - 要验证的签名。

Returns:

verify

public VerifyResult verify(SignatureAlgorithm algorithm, byte[] digest, byte[] signature, Context context)

使用配置的密钥验证签名。 验证操作支持对称密钥和非对称密钥。 在非对称密钥的情况下,密钥的公共部分用于验证签名。 此操作需要 keys/verify 非本地操作的权限。

SignatureAlgorithm指示用于验证签名的算法类型。 可能的值包括:ES256、、ES384ES512ES256KPS256RS384RS512RS256RS384、 和 RS512

示例代码

在收到响应时,根据指定的摘要验证签名会输出验证详细信息。

byte[] dataBytes = new byte[100];
 new Random(0x1234567L).nextBytes(dataBytes);
 MessageDigest msgDigest = MessageDigest.getInstance("SHA-256");
 msgDigest.update(dataBytes);
 byte[] digestBytes = msgDigest.digest();

 // A signature can be obtained from the SignResult returned by the CryptographyClient.sign() operation.
 VerifyResult verifyResponse = cryptographyClient.verify(SignatureAlgorithm.ES256, digestBytes, signatureBytes,
     new Context("key1", "value1"));

 System.out.printf("Verification status: %s.%n", verifyResponse.isValid());

Parameters:

algorithm - 用于签名的算法。
digest - 从中创建签名的内容。
signature - 要验证的签名。
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

verifyData

public VerifyResult verifyData(SignatureAlgorithm algorithm, byte[] data, byte[] signature)

使用配置的密钥针对原始数据验证签名。 验证操作支持对称密钥和非对称密钥。 在非对称密钥的情况下,密钥的公共部分用于验证签名。 此操作需要 keys/verify 非本地操作的权限。

SignatureAlgorithm指示用于验证签名的算法类型。 可能的值包括:ES256、、ES384ES512ES256KPS256RS384RS512RS256RS384、 和 RS512

示例代码

在收到响应时,根据原始数据验证签名会输出验证详细信息。

byte[] myData = new byte[100];
 new Random(0x1234567L).nextBytes(myData);

 // A signature can be obtained from the SignResult returned by the CryptographyClient.sign() operation.
 VerifyResult verifyResult = cryptographyClient.verify(SignatureAlgorithm.ES256, myData, signature);

 System.out.printf("Verification status: %s.%n", verifyResult.isValid());

Parameters:

algorithm - 用于签名的算法。
data - 要对其验证签名的原始内容。
signature - 要验证的签名。

Returns:

verifyData

public VerifyResult verifyData(SignatureAlgorithm algorithm, byte[] data, byte[] signature, Context context)

使用配置的密钥针对原始数据验证签名。 验证操作支持对称密钥和非对称密钥。 在非对称密钥的情况下,密钥的公共部分用于验证签名。 此操作需要 keys/verify 非本地操作的权限。

SignatureAlgorithm指示用于验证签名的算法类型。 可能的值包括:ES256、、ES384ES512ES256KPS256RS384RS512RS256RS384、 和 RS512

示例代码

在收到响应时,根据原始数据验证签名会输出验证详细信息。

byte[] dataToVerify = new byte[100];
 new Random(0x1234567L).nextBytes(dataToVerify);

 // A signature can be obtained from the SignResult returned by the CryptographyClient.sign() operation.
 VerifyResult verificationResult = cryptographyClient.verify(SignatureAlgorithm.ES256, dataToVerify,
     mySignature, new Context("key1", "value1"));

 System.out.printf("Verification status: %s.%n", verificationResult.isValid());

Parameters:

algorithm - 用于签名的算法。
data - 要对其验证签名的原始内容。
signature - 要验证的签名。
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

wrapKey

public WrapResult wrapKey(KeyWrapAlgorithm algorithm, byte[] key)

使用配置的密钥包装对称密钥。 包装操作支持使用对称和非对称密钥包装对称密钥。 此操作需要 keys/wrapKey 非本地操作的权限。

KeyWrapAlgorithm指示用于包装指定密钥内容的算法类型。 可能的值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括: A128KWA192KWA256KW

示例代码

在收到响应时,包装密钥内容会输出已包装的密钥详细信息。

byte[] key = new byte[100];
 new Random(0x1234567L).nextBytes(key);

 WrapResult wrapResult = cryptographyClient.wrapKey(KeyWrapAlgorithm.RSA_OAEP, key);

 System.out.printf("Received encrypted key of length: %d, with algorithm: %s.%n",
     wrapResult.getEncryptedKey().length, wrapResult.getAlgorithm());

Parameters:

algorithm - 用于包装密钥的加密算法。
key - 要包装的关键内容。

Returns:

包含WrapResultgetEncryptedKey()已包装的键结果的 。

wrapKey

public WrapResult wrapKey(KeyWrapAlgorithm algorithm, byte[] key, Context context)

使用配置的密钥包装对称密钥。 包装操作支持使用对称和非对称密钥包装对称密钥。 此操作需要 keys/wrapKey 非本地操作的权限。

指示 KeyWrapAlgorithm 用于包装指定键内容的算法类型。 可能的值包括: RSA1_5RSA_OAEPRSA_OAEP_256。 对称密钥的可能值包括: A128KWA192KWA256KW

示例代码

在收到响应时,包装密钥内容会输出已包装的密钥详细信息。

byte[] keyToWrap = new byte[100];
 new Random(0x1234567L).nextBytes(keyToWrap);

 WrapResult keyWrapResult = cryptographyClient.wrapKey(KeyWrapAlgorithm.RSA_OAEP, keyToWrap,
     new Context("key1", "value1"));

 System.out.printf("Received encrypted key of length: %d, with algorithm: %s.%n",
     keyWrapResult.getEncryptedKey().length, keyWrapResult.getAlgorithm());

Parameters:

algorithm - 用于包装密钥的加密算法。
key - 要包装的关键内容。
context - 在服务调用期间通过 HttpPipeline 传递的其他上下文。

Returns:

包含WrapResultgetEncryptedKey()已包装的键结果的 。

适用于