そのため、WinRT で新しい暗号化名前空間を使用しようとすると、興味深い問題が発生しました ( Windows::Security::Cryptography
)。つまり、CryptographicEngine::Encrypt()
またはCryptographicEngine::Decrypt()
メソッドを使用しようとすると、InvalidArgumentException
. 私は決してこの分野のプロではありませんが、かなり基本的なシナリオに絞り込んで、まだ失敗していると感じています。
//------------------------------------------------------------------------------
// TestEncryptDecrypt
// Simple test that encrypts a string, then decrypts it and compares the result.
void TestEncryptDecrypt()
{
// Select asymmetric algorithm
Platform::String^ strAlgorithm = Windows::Security::Cryptography::Core::AsymmetricAlgorithmNames::RsaOaepSha512;
Windows::Security::Cryptography::Core::AsymmetricKeyAlgorithmProvider^ spAlgorithm = Windows::Security::Cryptography::Core::AsymmetricKeyAlgorithmProvider::OpenAlgorithm(strAlgorithm);
// Create public/private keys
unsigned int nKeySize = 512;
Windows::Security::Cryptography::Core::CryptographicKey^ spKeyPair = spAlgorithm->CreateKeyPair(nKeySize);
// Message to encrypt/decrypt
Platform::String^ strMessage = L"Test Message";
Windows::Storage::Streams::IBuffer^ spMessageBuffer = Windows::Security::Cryptography::CryptographicBuffer::ConvertStringToBinary(strMessage, Windows::Security::Cryptography::BinaryStringEncoding::Utf8);
// Encrypt the data
// *** InvalidArgumentException throw here ***
Windows::Storage::Streams::IBuffer^ spEncryptedBuffer = Windows::Security::Cryptography::Core::CryptographicEngine::Encrypt(spKeyPair, spMessageBuffer, nullptr /*Initialization vector not used with asymmetric algorithms.*/);
// Decrypt the data
Windows::Storage::Streams::IBuffer^ spUnencryptedBuffer = Windows::Security::Cryptography::Core::CryptographicEngine::Decrypt(spKeyPair, spEncryptedBuffer, nullptr /*Initialization vector not used with asymmetric algorithms.*/);
// Retrieve the original message
Platform::String^ strUnencryptedMessage = Windows::Security::Cryptography::CryptographicBuffer::ConvertBinaryToString(Windows::Security::Cryptography::BinaryStringEncoding::Utf8, spUnencryptedBuffer);
Assert(strUnencryptedMessage == strMessage);
}
私はまだ何かばかげたことをしている可能性があります (そしておそらくそうです) が、残念ながら私はそれを見ていません... 何かアイデアはありますか?
前もって感謝します!:)