安全な文字列をユニコード文字列に変換しようとしています。安全なデータを処理する必要があるため、使用後にメモリをクリアする必要があります。API を unicode に変換してみました。
MultiByteToWideChar()
A2W()
mbstowcs_s()
Unicode 文字列への変換は、上記のすべての API で正常に機能しました。上記の操作の後、o/p Unicode 値を含め、保護されたすべてのデータ メモリをクリアしました。しかし、この後にメモリをダンプしている間、Unicode 文字列のコピーがメモリに残ります。安全なデータを処理するすべての変数がSecureZeroMemory
( () API を使用して) クリアされていることを確認しました。上記の API で使用される一時的なコピーであると思われます。ユニコード値が必要で、データを保護する必要があります。どうすればそれを達成できますか?
コード スニペットは以下で共有されます。
CHAR* pszPassword = NULL;
UINT unPlainTextLen = 0;
// Decrypt the secure data
if( DecryptSecureData( pszPassword, unPlainTextLen))
{
WCHAR *ptcszPassword_o = new WCHAR[unPlainTextLen + 1];
ptcszPassword_o[ unPlainTextLen ] = 0;
size_t unSizeConverted = 0;
if( 0 == mbstowcs_s( &unSizeConverted, ptcszPassword_o, unPlainTextLen + 1,
reinterpret_cast<CHAR*>( pszPassword ), unPlainTextLen ))
{
// Clear Decrypted o/p buffer
SecureZeroMemory( pszPassword, unPlainTextLen);
delete[] pszPassword;
// Process unicode data ptcszPassword_o
SecureZeroMemory( ptcszPassword_o, unPlainTextLen * 2 );
delete[] pszPassword;
}
}