SymmetricKeyAlgorithmProvider Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Representa um provedor de algoritmos de chave simétrica. Para obter mais informações, consulte Chaves criptográficas.
public ref class SymmetricKeyAlgorithmProvider sealed
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class SymmetricKeyAlgorithmProvider final
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class SymmetricKeyAlgorithmProvider
Public NotInheritable Class SymmetricKeyAlgorithmProvider
- Herança
- Atributos
Requisitos do Windows
Família de dispositivos |
Windows 10 (introduzida na 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (introduzida na v1.0)
|
Exemplos
using Windows.Security.Cryptography;
using Windows.Security.Cryptography.Core;
using Windows.Storage.Streams;
namespace SampleSymmetricKeyAlgorithmProvider
{
sealed partial class SymmKeyAlgProviderApp : Application
{
public SymmKeyAlgProviderApp()
{
// Initialize the application.
this.InitializeComponent();
// Initialize the encryption process.
String strMsg = "1234567812345678"; // Data to encrypt.
String strAlgName = SymmetricAlgorithmNames.AesCbc;
UInt32 keyLength = 32; // Length of the key, in bytes
BinaryStringEncoding encoding; // Binary encoding value
IBuffer iv; // Initialization vector
CryptographicKey key; // Symmetric key
// Encrypt a message.
IBuffer buffEncrypted = this.SampleCipherEncryption(
strMsg,
strAlgName,
keyLength,
out encoding,
out iv,
out key);
// Decrypt a message.
this.SampleCipherDecryption(
strAlgName,
buffEncrypted,
iv,
encoding,
key);
}
public IBuffer SampleCipherEncryption(
String strMsg,
String strAlgName,
UInt32 keyLength,
out BinaryStringEncoding encoding,
out IBuffer iv,
out CryptographicKey key)
{
// Initialize the initialization vector.
iv = null;
// Initialize the binary encoding value.
encoding = BinaryStringEncoding.Utf8;
// Create a buffer that contains the encoded message to be encrypted.
IBuffer buffMsg = CryptographicBuffer.ConvertStringToBinary(strMsg, encoding);
// Open a symmetric algorithm provider for the specified algorithm.
SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName);
// Demonstrate how to retrieve the name of the algorithm used.
String strAlgNameUsed = objAlg.AlgorithmName;
// Determine whether the message length is a multiple of the block length.
// This is not necessary for PKCS #7 algorithms which automatically pad the
// message to an appropriate length.
if (!strAlgName.Contains("PKCS7"))
{
if ((buffMsg.Length % objAlg.BlockLength) != 0)
{
throw new Exception("Message buffer length must be multiple of block length.");
}
}
// Create a symmetric key.
IBuffer keyMaterial = CryptographicBuffer.GenerateRandom(keyLength);
key = objAlg.CreateSymmetricKey(keyMaterial);
// CBC algorithms require an initialization vector. Here, a random
// number is used for the vector.
if (strAlgName.Contains("CBC"))
{
iv = CryptographicBuffer.GenerateRandom(objAlg.BlockLength);
}
// Encrypt the data and return.
IBuffer buffEncrypt = CryptographicEngine.Encrypt(key, buffMsg, iv);
return buffEncrypt;
}
public void SampleCipherDecryption(
String strAlgName,
IBuffer buffEncrypt,
IBuffer iv,
BinaryStringEncoding encoding,
CryptographicKey key)
{
// Declare a buffer to contain the decrypted data.
IBuffer buffDecrypted;
// Open an symmetric algorithm provider for the specified algorithm.
SymmetricKeyAlgorithmProvider objAlg = SymmetricKeyAlgorithmProvider.OpenAlgorithm(strAlgName);
// The input key must be securely shared between the sender of the encrypted message
// and the recipient. The initialization vector must also be shared but does not
// need to be shared in a secure manner. If the sender encodes a message string
// to a buffer, the binary encoding method must also be shared with the recipient.
buffDecrypted = CryptographicEngine.Decrypt(key, buffEncrypt, iv);
// Convert the decrypted buffer to a string (for display). If the sender created the
// original message buffer from a string, the sender must tell the recipient what
// BinaryStringEncoding value was used. Here, BinaryStringEncoding.Utf8 is used to
// convert the message to a buffer before encryption and to convert the decrypted
// buffer back to the original plaintext.
String strDecrypted = CryptographicBuffer.ConvertBinaryToString(encoding, buffDecrypted);
}
}
}
Comentários
Você cria um objeto SymmetricKeyAlgorithmProvider chamando o método OpenAlgorithm estático e especificando um dos seguintes nomes de algoritmo.
Sem preenchimento:+ DES_CBC
DES_ECB
3DES_CBC
3DES_ECB
RC2_CBC
RC2_ECB
AES_CBC
AES_ECB
Modos de preenchimento de bloco PKCS nº 7:+ AES_CBC_PKCS7
AES_ECB_PKCS7
DES_CBC_PKCS7
DES_ECB_PKCS7
3DES_CBC_PKCS7
3DES_ECB_PKCS7
RC2_CBC_PKCS7
RC2_ECB_PKCS7
Modos autenticados (consulte a classe EncryptedAndAuthenticatedData ):+ AES_GCM
AES_CCM
Criptografia de fluxo:+ RC4
Propriedades
AlgorithmName |
Obtém o nome do algoritmo simétrico aberto. |
BlockLength |
Obtém o tamanho, em bytes, do bloco de criptografia para o algoritmo aberto. |
Métodos
CreateSymmetricKey(IBuffer) |
Cria uma chave simétrica. |
OpenAlgorithm(String) |
Cria uma instância da classe SymmetricKeyAlgorithmProvider e abre o algoritmo especificado para uso. |