Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Panduan memulai cepat ini menunjukkan cara menggunakan lebih banyak MIP Protection SDK. Saat Anda menggunakan salah satu templat perlindungan yang Anda cantumkan pada panduan mulai cepat sebelumnya, Anda memakai pengendali perlindungan untuk mengenkripsi teks ad hoc. Kelas penanganan perlindungan menyediakan berbagai operasi untuk menerapkan dan menghapus perlindungan.
Prasyarat
Jika Anda belum melakukannya, pastikan untuk menyelesaikan prasyarat berikut sebelum melanjutkan:
- Selesaikan Mulai Cepat: Membuat daftar templat perlindungan (C++) terlebih dahulu, yang membangun solusi awal Visual Studio untuk membuat daftar templat perlindungan yang tersedia bagi pengguna yang diautentikasi. Panduan singkat "Enkripsi dan dekripsi teks" ini merupakan kelanjutan dari panduan sebelumnya.
- Secara opsional: Tinjau Penangan perlindungan dalam konsep MIP SDK .
Menerapkan kelas pengamat untuk memantau objek handler Perlindungan
Mirip dengan observer yang Anda implementasikan untuk profil Protection dan engine dalam panduan memulai cepat inisialisasi aplikasi, sekarang Anda mengimplementasikan kelas observer untuk objek handler Protection.
Buat implementasi dasar untuk pengamat penangan Perlindungan dengan memperluas kelas SDK mip::ProtectionHandler::Observer. SDK menginisialisasi observer dan kemudian menggunakannya untuk memantau operasi handler perlindungan.
Buka solusi Visual Studio yang Anda kerjakan di artikel "Mulai Cepat: Daftar templat perlindungan (C++)" sebelumnya.
Tambahkan kelas baru ke proyek Anda, yang menghasilkan file header (.h) dan implementasi (.cpp) untuk Anda:
- Di Penjelajah Solusi, klik kanan simpul proyek lagi, pilih Tambahkan, lalu pilih Kelas.
- Pada dialog Tambahkan Kelas :
- Di bidang Nama Kelas , masukkan
handler_observer. Perhatikan bahwa Visual Studio secara otomatis mengisi file .h dan bidang file .cpp berdasarkan nama yang Anda masukkan. - Setelah selesai, pilih OK.
- Di bidang Nama Kelas , masukkan
Setelah membuat file .h dan .cpp untuk kelas , Visual Studio membuka kedua file di tab Grup Editor. Sekarang perbarui setiap file untuk mengimplementasikan kelas pengamat baru Anda:
Perbarui
handler_observer.hdengan memilih dan menghapus kelas yang dihasilkanhandler_observer. Jangan hapus direktif pra-prosesor yang dihasilkan langkah sebelumnya (#pragma, #include). Kemudian salin dan tempel sumber berikut ke dalam file setelah arahan praprosesor yang ada:#include <memory> #include "mip/protection/protection_engine.h" using std::shared_ptr; using std::exception_ptr; class ProtectionHandlerObserver final : public mip::ProtectionHandler::Observer { public: ProtectionHandlerObserver() { } void OnCreateProtectionHandlerSuccess(const shared_ptr<mip::ProtectionHandler>& protectionHandler, const shared_ptr<void>& context) override; void OnCreateProtectionHandlerFailure(const exception_ptr& Failure, const shared_ptr<void>& context) override; };Perbarui
handler_observer.cppdengan memilih dan menghapus implementasi kelas yang dihasilkanhandler_observer. Jangan hapus direktif pra-prosesor yang dihasilkan langkah sebelumnya (#pragma, #include). Kemudian salin dan tempel sumber berikut ke dalam file setelah arahan praprosesor yang ada:#include "handler_observer.h" using std::shared_ptr; using std::promise; using std::exception_ptr; void ProtectionHandlerObserver::OnCreateProtectionHandlerSuccess( const shared_ptr<mip::ProtectionHandler>& protectionHandler,const shared_ptr<void>& context) { auto createProtectionHandlerPromise = static_cast<promise<shared_ptr<mip::ProtectionHandler>>*>(context.get()); createProtectionHandlerPromise->set_value(protectionHandler); }; void ProtectionHandlerObserver::OnCreateProtectionHandlerFailure( const exception_ptr& Failure, const shared_ptr<void>& context) { auto createProtectionHandlerPromise = static_cast<promise<shared_ptr<mip::ProtectionHandler>>*>(context.get()) createProtectionHandlerPromise->set_exception(Failure); };
Secara opsional, gunakan Ctrl+Shift+B (Build Solution) untuk menjalankan kompilasi pengujian dan tautan solusi Anda untuk memverifikasi bahwa solusi berhasil dibuat sebelum melanjutkan.
Tambahkan logika untuk mengenkripsi dan mendekripsi teks ad hoc
Tambahkan logika untuk mengenkripsi dan mendekripsi teks ad hoc menggunakan objek Protection engine.
Dengan menggunakan Penjelajah Solusi, buka file .cpp dalam proyek Anda yang berisi implementasi dari metode
main().Tambahkan direktif #include berikut serta direktif using di bawah direktif yang sesuai yang sudah ada di bagian atas file:
#include "mip/protection/protection_descriptor_builder.h" #include "mip/protection_descriptor.h" #include "handler_observer.h" using mip::ProtectionDescriptor; using mip::ProtectionDescriptorBuilder; using mip::ProtectionHandler;Menjelang akhir bagian
Main()body, tempat Anda terakhir berhenti pada panduan memulai cepat sebelumnya, sisipkan kode berikut://Encrypt/Decrypt text: string templateId = "<Template-ID>";//Template ID from previous QuickStart e.g. "bb7ed207-046a-4caf-9826-647cff56b990" string inputText = "<Sample-Text>";//Sample Text //Refer to ProtectionDescriptor docs for details on creating the descriptor auto descriptorBuilder = mip::ProtectionDescriptorBuilder::CreateFromTemplate(templateId); const std::shared_ptr<mip::ProtectionDescriptor>& descriptor = descriptorBuilder->Build(); //Create Publishing settings using a descriptor mip::ProtectionHandler::PublishingSettings publishingSettings = mip::ProtectionHandler::PublishingSettings(descriptor); //Create a publishing protection handler using Protection Descriptor auto handlerObserver = std::make_shared<ProtectionHandlerObserver>(); engine->CreateProtectionHandlerForPublishingAsync(publishingSettings, handlerObserver, pHandlerPromise); auto publishingHandler = pHandlerFuture.get(); std::vector<uint8_t> inputBuffer(inputText.begin(), inputText.end()); //Show action plan cout << "Applying Template ID " + templateId + " to: " << endl << inputText << endl; //Encrypt buffer using Publishing Handler std::vector<uint8_t> encryptedBuffer; encryptedBuffer.resize(static_cast<size_t>(publishingHandler->GetProtectedContentLength(inputText.size(), true))); publishingHandler->EncryptBuffer(0, &inputBuffer[0], static_cast<int64_t>(inputBuffer.size()), &encryptedBuffer[0], static_cast<int64_t>(encryptedBuffer.size()), true); std::string encryptedText(encryptedBuffer.begin(), encryptedBuffer.end()); cout << "Encrypted Text :" + encryptedText; //Show action plan cout << endl << "Decrypting string: " << endl << endl; //Generate publishing license, so it can be used later to decrypt text. auto serializedPublishingLicense = publishingHandler->GetSerializedPublishingLicense(); //Use same PL to decrypt the encryptedText. auto cHandlerPromise = std::make_shared<std::promise<std::shared_ptr<ProtectionHandler>>>(); auto cHandlerFuture = cHandlerPromise->get_future(); shared_ptr<ProtectionHandlerObserver> cHandlerObserver = std::make_shared<ProtectionHandlerObserver>(); //Create consumption settings using serialized publishing license. mip::ProtectionHandler::ConsumptionSettings consumptionSettings = mip::ProtectionHandler::ConsumptionSettings(serializedPublishingLicense); engine->CreateProtectionHandlerForConsumptionAsync(consumptionSettings, cHandlerObserver, cHandlerPromise); auto consumptionHandler = cHandlerFuture.get(); //Use consumption handler to decrypt the text. std::vector<uint8_t> decryptedBuffer(static_cast<size_t>(encryptedText.size())); int64_t decryptedSize = consumptionHandler->DecryptBuffer( 0, &encryptedBuffer[0], static_cast<int64_t>(encryptedBuffer.size()), &decryptedBuffer[0], static_cast<int64_t>(decryptedBuffer.size()), true); decryptedBuffer.resize(static_cast<size_t>(decryptedSize)); std::string decryptedText(decryptedBuffer.begin(), decryptedBuffer.end()); // Output decrypted content. Should match original input text. cout << "Decrypted Text :" + decryptedText << endl;Menjelang bagian akhir
main(), temukan blok penonaktifan aplikasi yang dibuat oleh panduan mulai cepat pertama dan tambahkan baris berikut untuk melepaskan sumber daya penangan:publishingHandler = nullptr; consumptionHandler = nullptr;Ganti nilai placeholder dalam kode sumber menggunakan konstanta string berikut:
Pengganti sementara Nilai <teks sampel> Teks sampel yang ingin Anda lindungi, misalnya: "cipher text".<Id Templat> ID templat yang ingin Anda gunakan untuk melindungi teks. Misalnya: "bb7ed207-046a-4caf-9826-647cff56b990"
Membangun dan menguji aplikasi
Buat dan uji aplikasi klien Anda.
Gunakan Ctrl+Shift+B (Build Solution) untuk membangun aplikasi klien Anda. Jika Anda tidak memiliki kesalahan build, gunakan F5 (Mulai penelusuran kesalahan) untuk menjalankan aplikasi Anda.
Jika proyek Anda berhasil membangun dan berjalan, aplikasi meminta token akses setiap kali SDK memanggil metode Anda
AcquireOAuth2Token(). Seperti yang Anda lakukan sebelumnya dalam panduan mulai cepat "Daftar templat perlindungan", jalankan skrip PowerShell Anda untuk memperoleh token setiap kali menggunakan nilai yang disediakan untuk $authority dan $resourceUrl.*** Template List: Name: Confidential \ All Employees : a74f5027-f3e3-4c55-abcd-74c2ee41b607 Name: Highly Confidential \ All Employees : bb7ed207-046a-4caf-9826-647cff56b990 Name: Confidential : 174bc02a-6e22-4cf2-9309-cb3d47142b05 Name: Contoso Employees Only : 667466bf-a01b-4b0a-8bbf-a79a3d96f720 Applying Template ID bb7ed207-046a-4caf-9826-647cff56b990 to: <Sample-Text> Encrypted Text :y¬╩$Ops7Γ╢╖¢t Decrypting string: Run the PowerShell script to generate an access token using the following values, then copy/paste it below: Set $authority to: https://login.microsoftonline.com/common/oauth2/authorize Set $resourceUrl to: https://aadrm.com Sign in with user account: user1@tenant.onmicrosoft.com Enter access token: <paste-access-token-here> Press any key to continue . . . Run the PowerShell script to generate an access token using the following values, then copy/paste it below: Set $authority to: https://login.microsoftonline.com/94f69844-8d34-4794-bde4-3ac89ad2b664/oauth2/authorize Set $resourceUrl to: https://aadrm.com Sign in with user account: user1@tenant.onmicrosoft.com Enter access token: <paste-access-token-here> Press any key to continue . . . Decrypted Text :<Sample-Text> C:\MIP Sample Apps\ProtectionQS\Debug\ProtectionQS.exe (process 8252) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .
Langkah berikutnya
- Jelajahi sampel MIP Protection SDK C++ pada GitHub.