Como: Dispositivos de criptografia de hardware de acesso
Você pode usar o CspParameters classe para acesso dispositivos de criptografia de hardware. Por exemplo, você pode usar essa classe para integrar seu aplicativo com um cartão SMART, um gerador de números aleatórios do hardware ou uma implementação de hardware de um algoritmo de criptografia específico.
The CspParameters classe cria um provedor de serviços de criptografia (CSP) que acessa um dispositivo de criptografia de hardware instalado corretamente. Você pode verificar a disponibilidade de um CSP inspecionando a seguinte chave do registro usando o Editor do registro (Regex.exe): HKEY_LOCAL_MACHINE\Software\Microsoft\criptografia\Defaults\provedor.
Para assinar dados usando um cartão de chave
Criar uma nova instância do CspParameters classe, passando o tipo de provedor de inteiro e o nome do provedor para o construtor.
Passar os sinalizadores adequados para o Flags propriedade do recém-criado CspParameters objeto. Por exemplo, passar o UseDefaultKeyContainer sinalizar.
Criar uma nova instância de um AsymmetricAlgorithm classe (por exemplo, o RSACryptoServiceProvider classe), passando o CspParameters objeto para o construtor.
Assinar seus dados usando um o Sign métodos e verifique se os dados usando um do Verify métodos.
Para gerar um número aleatório usando um gerador de números aleatórios de hardware
Criar uma nova instância do CspParameters classe, passando o tipo de provedor de inteiro e o nome do provedor para o construtor.
Criar uma nova instância do RNGCryptoServiceProvider, passando o CspParameters objeto para o construtor.
Crie um valor aleatório usando o GetBytes ou GetNonZeroBytes método.
Exemplo
O exemplo de código a seguir demonstra como assinar dados usando um cartão SMART.O exemplo de código cria um CspParameters objeto que expõe um cartão SMART e, em seguida, inicializa um RSACryptoServiceProvider objeto usando o CSP. O exemplo de código assina e verifica alguns dados.
Imports System
Imports System.Security.Cryptography
Module SCSign
Sub Main(ByVal args() As String)
' To idendify the Smart Card CryptoGraphic Providers on your
' computer, use the Microsoft Registry Editor (Regedit.exe).
' The available Smart Card CryptoGraphic Providers are listed
' in HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
' Create a new CspParameters object that identifies a
' Smart Card CryptoGraphic Provider.
' The 1st parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider Types.
' The 2nd parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
Dim csp As New CspParameters(1, "Schlumberger Cryptographic Service Provider")
csp.Flags = CspProviderFlags.UseDefaultKeyContainer
' Initialize an RSACryptoServiceProvider object using
' the CspParameters object.
Dim rsa As New RSACryptoServiceProvider(csp)
' Create some data to sign.
Dim data() As Byte = {0, 1, 2, 3, 4, 5, 6, 7}
Console.WriteLine("Data : " + BitConverter.ToString(data))
' Sign the data using the Smart Card CryptoGraphic Provider.
Dim sig As Byte() = rsa.SignData(data, "SHA1")
Console.WriteLine("Signature : " + BitConverter.ToString(sig))
' Verify the data using the Smart Card CryptoGraphic Provider.
Dim verified As Boolean = rsa.VerifyData(data, "SHA1", sig)
Console.WriteLine("Verified")
End Sub
End Module
using System;
using System.Security.Cryptography;
namespace SmartCardSign
{
class SCSign
{
static void Main(string[] args)
{
// To idendify the Smart Card CryptoGraphic Providers on your
// computer, use the Microsoft Registry Editor (Regedit.exe).
// The available Smart Card CryptoGraphic Providers are listed
// in HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
// Create a new CspParameters object that identifies a
// Smart Card CryptoGraphic Provider.
// The 1st parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider Types.
// The 2nd parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
CspParameters csp = new CspParameters(1, "Schlumberger Cryptographic Service Provider");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
// Initialize an RSACryptoServiceProvider object using
// the CspParameters object.
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
// Create some data to sign.
byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
Console.WriteLine("Data : " + BitConverter.ToString(data));
// Sign the data using the Smart Card CryptoGraphic Provider.
byte[] sig = rsa.SignData(data, "SHA1");
Console.WriteLine("Signature : " + BitConverter.ToString(sig));
// Verify the data using the Smart Card CryptoGraphic Provider.
bool verified = rsa.VerifyData(data, "SHA1", sig);
Console.WriteLine("Verified : " + verified);
}
}
}
using namespace System;
using namespace System::Security::Cryptography;
int main()
{
// To idendify the Smart Card CryptoGraphic Providers on your
// computer, use the Microsoft Registry Editor (Regedit.exe).
// The available Smart Card CryptoGraphic Providers are listed
// in HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
// Create a new CspParameters object that identifies a
// Smart Card CryptoGraphic Provider.
// The 1st parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider Types.
// The 2nd parameter comes from HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\Defaults\Provider.
CspParameters^ csp = gcnew CspParameters( 1,L"Schlumberger Cryptographic Service Provider" );
csp->Flags = CspProviderFlags::UseDefaultKeyContainer;
// Initialize an RSACryptoServiceProvider object using
// the CspParameters object.
RSACryptoServiceProvider^ rsa = gcnew RSACryptoServiceProvider( csp );
// Create some data to sign.
array<Byte>^data = gcnew array<Byte>{
0,1,2,3,4,5,6,7
};
Console::WriteLine( L"Data : {0}", BitConverter::ToString( data ) );
// Sign the data using the Smart Card CryptoGraphic Provider.
array<Byte>^sig = rsa->SignData( data, L"SHA1" );
Console::WriteLine( L"Signature : {0}", BitConverter::ToString( sig ) );
// Verify the data using the Smart Card CryptoGraphic Provider.
bool verified = rsa->VerifyData( data, L"SHA1", sig );
Console::WriteLine( L"Verified : {0}", verified );
}
Compilando o código
Incluir o System e System.Security.Cryptography espaços para nome.
Você deve ter uma SMART leitor de cartão e os drivers instalados no seu computador.
Você deve inicializar o CspParameters objeto usando as informações específicas para seu leitor de cartão. Para obter mais informações, consulte a documentação da sua leitora de cartões.