私の質問は、.Net for Windows Phone を使用してデータに署名する方法です。マネージ言語は C# です。
RSACryptoServiceProvider を使用して秘密鍵と公開鍵のペアを生成し、「SHA256Managed」ハッシュ アルゴリズムを使用して秘密鍵でデータに署名したいと考えています。
string DataTobeEncrypt = "upupdowndownleftleftrightrightABstart";
CspParameter cspParams = new CspParameters();
cspParams = new CspParameters();
cspParams.ProviderType = 1; // PROV_RSA_FULL
cspParams.Flags = CspProviderFlags.UseArchivableKey;
cspParams.KeyNumber = (int)KeyNumber.Exchange;
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(2048,cspParams);
byte[] plainBytes = Encoding.Unicode.GetBytes(DataTobeEncrypt);
byte[] signedBytes = rsaProvider.SignHash(plainBytes, new SHA256Managed());
実行すると例外が発生しました: タイプ 'System.Security.Cryptography.CryptographicException' の例外が mscorlib.ni.dll で発生し、マネージド/ネイティブ境界の前に処理されませんでした 指定されたアルゴリズムが無効です。
次に、アルゴリズムをSHA1またはMD5に切り替えても同じエラーが発生するため、試しました:
SHA256Managed hashAlgorithm = new SHA256Managed();
byte[] hashedBytes = hashAlgorithm.ComputeHash(plainBytes);
signedBytes = rsaProvider.SighHash(hashedBytes, "1.2.840.113548.1.1.11");
次に、例外が発生します。タイプ 'System.NullReferenceException' の最初のチャンス例外が mscorlib.ni.dll で発生しました オブジェクト参照がオブジェクトのインスタンスに設定されていません。
次に、rsaProvider の使用をあきらめ、AsymmetricSignatureFormatter に切り替えます。
AsymmetricSignatureFormatter formatter = new RSAPKCS1SignatureFormatter();
formatter.SetHashAlgorithm("SHA256");
formatter.SetKey(rsaProvider);
signedBytes = formatter(plainBytes);
しかし、それはまだ失敗しました、私が得るものは次のとおりです:タイプの最初のチャンス例外 'System.Security.Cryptography.CryptographicException' のタイプの例外が mscorlib.ni.dll で発生し、マネージド/ネイティブ境界の前に処理されませんでした 無効なアルゴリズムが指定されました.
多くのスレッドを検索しましたが、Windows Phone プラットフォームの特定の例が見つかりませんでした。誰か助けてもらえますか?