我的问题是:如何使用 .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());
执行,我得到了异常:在 mscorlib.ni.dll 中发生了“System.Security.Cryptography.CryptographicException”类型的异常,并且在指定托管/本机边界无效算法之前未处理。
然后我将算法切换到 SHA1 或 MD5,仍然得到相同的错误,然后我尝试:
SHA256Managed hashAlgorithm = new SHA256Managed();
byte[] hashedBytes = hashAlgorithm.ComputeHash(plainBytes);
signedBytes = rsaProvider.SighHash(hashedBytes, "1.2.840.113548.1.1.11");
然后我得到了异常:在 mscorlib.ni.dll 对象引用中发生的“System.NullReferenceException”类型的第一次机会异常未设置为对象的实例。
然后我放弃使用 rsaProvider,转而使用 AsymmetricSignatureFormatter,我所做的是:
AsymmetricSignatureFormatter formatter = new RSAPKCS1SignatureFormatter();
formatter.SetHashAlgorithm("SHA256");
formatter.SetKey(rsaProvider);
signedBytes = formatter(plainBytes);
但它仍然失败,我得到的是:A first chance exception of type 'System.Security.Cryptography.CryptographicException' 类型的异常发生在 mscorlib.ni.dll 中,并且在托管/本机边界之前未处理指定的无效算法.
我搜索了很多线程,但没有找到任何适用于 windows phone 平台的具体示例,有人可以帮我吗?