Tipik CNG Programlama
CNG API'si, belirli bir sağlayıcı yerine gerekli şifreleme algoritmasını belirterek sağlayıcı yüklemenizi sağlayan genişletilebilir bir sağlayıcı modeli uygular. Bunun avantajı, bir algoritma sağlayıcısının değiştirilebilir veya yükseltilebilir olmasıdır ve yeni sağlayıcıyı kullanmak için kodunuzu hiçbir şekilde değiştirmeniz gerekmez. Ayrıca, gelecekte bazı algoritmaların güvenli olmadığı belirlenirse, bu algoritmanın daha güvenli bir sürümü kodunuzu etkilemeden yüklenebilir. CNG API'lerinin çoğu için sağlayıcı veya sağlayıcı tarafından oluşturulan bir nesne gerekir.
Şifreleme temel işlemleri için CNG API'sini kullanmayla ilgili tipik adımlar şunlardır:
- Algoritma Sağlayıcısını Açma
- Algoritma Özelliklerini Alma veya Ayarlama
- Anahtar Oluşturma veya İçeri Aktarma
- Şifreleme İşlemleri Gerçekleştirme
- Algoritma Sağlayıcısını Kapatma
Daha fazla bilgi için bkz. Programlama Örnekleri.
Algoritma Sağlayıcısını Açma
BCryptOpenAlgorithmProvider işlevi, BCryptCreateHash veya BCryptGenerateKeyPairgibi sonraki CNG API'lerinde kullanılan bir algoritma sağlayıcısı tanıtıcısı sağlar.
Algoritma Özelliklerini Alma veya Ayarlama
Algoritmanın anahtar boyutu veya geçerli işlem modu gibi uygulama ayrıntılarını almak için algoritma sağlayıcı tutamacını kullanabilirsiniz. Belirli özellikleri elde etmek için BCryptGetProperty işlevini kullanırsınız.
Algoritmanın özelliklerini de değiştirebilirsiniz. Örneğin, AES ile ECB blok şifreleme zinciri kullanmak istiyorsanız, AES algoritmasının BCRYPT_CHAINING_MODE özelliğini BCRYPT_CHAIN_MODE_ECBolarak ayarlarsınız; özelliği, her bir AES anahtarını yapılandırmaya gerek kalmadan bu algoritma tanıtıcısı kullanılarak oluşturulan tüm AES anahtarlarına atanır. Bu özellikleri değiştirmek için BCryptSetProperty işlevini kullanırsınız.
Anahtar Oluşturma veya İçeri Aktarma
Kullandığınız algoritmanın türüne bağlı olarak bir anahtar oluşturmanız veya yüklemeniz gerekebilir. Örneğin, BCryptEncrypt işlevi ilk parametre için bir anahtar tutamacı alır. Bu işlevin verileri AES gibi simetrik bir şifreleme algoritmasıyla şifrelemesini istiyorsanız, önce bir anahtar almanız gerekir. Anahtarı nasıl edindiğiniz, kullanılan algoritma türüne ve anahtarın kaynağına bağlıdır.
BCryptGenerateSymmetricKey ve BCryptGenerateKeyPairişlevlerinikısa ömürlü anahtarlar oluşturabilirsiniz. Ayrıca BCryptImportKey ve BCryptImportKeyPairişlevlerinibellek BLOB'undan kısa ömürlü anahtarları içeri aktarabilirsiniz.
Kalıcı anahtarlar için anahtar depolama işlevlerini kullanarak bir anahtar depolama sağlayıcısı yükler ve ardından anahtarları oluşturur veya yüklersiniz. Bu işlevleri, herhangi bir kapsayıcı adı için NULL geçirerek kısa ömürlü anahtarlar oluşturmak veya yüklemek için de kullanabilirsiniz. Anahtar depolama işlevleri hakkında daha fazla bilgi için bkz. CNG Anahtar Depolama İşlevleri.
Şifreleme İşlemleri Gerçekleştirme
Artık sırasıyla BCryptEncrypt veya BCryptDecrypt işlevlerini kullanarak verileri şifreleme veya şifre çözme gibi şifreleme işlemini gerçekleştirmeye hazırsınız.
Algoritma Sağlayıcısını Kapatma
Sağlayıcı artık gerekli olmadığında, sağlayıcıyı kapatmak için tanıtıcıyı BCryptCloseAlgorithmProvider işlevine geçirmeniz gerekir. Bu, sağlayıcının söz konusu algoritma sağlayıcı örneği için ayrılmış olan tüm kaynakları serbest bırakmasına neden olur. Sağlayıcı tanıtıcısı kapatıldıktan sonra yeniden kullanılamaz.
Sağlayıcının yüklenmesi görece zaman yoğunluklu bir işlem olabilir. Bu nedenle, uygulamanızın ömrü boyunca birden çok kez başvuracağınız tüm sağlayıcı tanıtıcılarını önbelleğe almalısınız.
Programlama Örnekleri
Aşağıdaki örneklerde, CNG kullanarak belirli şifreleme işlemlerinin nasıl gerçekleştirildiği açıklanmaktadır.
- CNG ile Karma Oluşturma
- CNG ile İmzalama Verileri
- CNG ile Verileri Şifrelemeyi