2

Windows RT で文字列を暗号化しようとしています。以前ProtectDatasystem.security名前空間で を使用できましたが、WinRT には存在しません。次のコードを使用しようとしましたが、機能しません。

public static async Task<string> EncryptSting(string data)
{
    DataProtectionProvider provider = new DataProtectionProvider();

    IBuffer unprotectedData = CryptographicBuffer.ConvertStringToBinary(data, BinaryStringEncoding.Utf8);
    //crashes here
    IBuffer protectedData = await provider.ProtectAsync(unprotectedData);

    return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, protectedData);
}

public static async Task<string> DecryptString(string data)
{
    DataProtectionProvider provider = new DataProtectionProvider();

    IBuffer inputData = CryptographicBuffer.ConvertStringToBinary(data, BinaryStringEncoding.Utf8);
    //crashes here
    IBuffer unprotectedData = await provider.UnprotectAsync(inputData);

    return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, unprotectedData);
}

編集:例外は

指定されたハンドルは無効です。(HRESULT からの例外: 0x80090026)

暗号化および復号化するときに3行目に発生します

4

2 に答える 2

3

ドキュメントによると、使用しているコンストラクターは暗号化ではなく復号化にのみ使用できます。

復号化操作に使用されるコンストラクター。UnprotectAsyncまたはUnprotectStreamAsyncメソッドを呼び出す前に、このコンストラクターを使用します。

暗号化には、ローカル マシン、現在のユーザー、特定のユーザーなどに対してデータを暗号化する必要があるかどうかを指定する、他のコンストラクターを使用する必要があります。

あなたのケースで復号化が機能しない理由はわかりませんが、暗号化が機能しない場合は、何を復号化しようとしているのかわかりません...

于 2014-06-16T09:48:16.147 に答える