microsoft-metro – 地铁式应用中的RSA加密
发布时间:2020-12-14 05:36:36 所属栏目:Windows 来源:网络整理
导读:我有公钥模数和公钥指数,我需要在metro风格的应用程序中生成公钥并加密数据.在c#中我们有RSAParameters类,但我找不到任何类似于metro风格应用程序的东西. 当我使用从证书直接接收的base64encoded公钥并尝试使用以下代码导入密钥时,我得到异常抛出的ASN1错误
我有公钥模数和公钥指数,我需要在metro风格的应用程序中生成公钥并加密数据.在c#中我们有RSAParameters类,但我找不到任何类似于metro风格应用程序的东西.
当我使用从证书直接接收的base64encoded公钥并尝试使用以下代码导入密钥时,我得到异常抛出的ASN1错误标记值. //sample dummy key from certificate in base64encoded string key = @"MIIB0zCCAX2gAwIBAgIJAMF/bHcA799IMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMTIwMzI3MTEyNjQ5WhcNMTMwMzI3MTEyNjQ5WjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMEPeWjP4sdqxvBlDId4BtRRTeWPwjlZLSOFvOVgmoSyoPva8psFUF6tH9/vPXIJrL80tdCoBt8YFH6pwDN9a1sCAwEAAaNQME4wHQYDVR0OBBYEFGARqQfUhX7atVU4sS+aQAPt/jFxMB8GA1UdIwQYMBaAFGARqQfUhX7atVU4sS+aQAPt/jFxMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQALqOyjovRbWUZvziVaE8QYy83WEln1l+HJU9D6tFncUZTlwSd8aUwyQsd3zOVNZ41oCAVv5R3h1jtBtPbM+c1K"; symmetricKeyAlgorithmProvider asymmAlg = AsymmetricKeyAlgorithmProvider.OpenAlgorithm("RSA_OAEP_SHA1"); CryptographicKey publicKey = asymmAlg.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(key)); string input64string ="encrypt this"; IBuffer dataToEncrypt = CryptographicBuffer.DecodeFromBase64String(input64string); IBuffer encryptedData = CryptographicEngine.Encrypt(publicKey,dataToEncrypt,null); 解决方法
您的密钥是公钥的模数部分,其长度为128.考虑从Metro中的C#代码导出的标准密钥:
using System.Runtime.InteropServices.WindowsRuntime; CryptographicKey standardKeyPair = provider.CreateKeyPair(1024); byte[] standardKey = standardKeyPair.ExportPublicKey(CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey).ToArray(); 你可以看到byte [] standardKey的长度是140,它有7位前缀和5位尾.我不知道原因,但我将额外的12位复制到已知密钥,它可以工作.希望这可以帮助你: public static IBuffer RsaEncrypt(this IBuffer dataToEncrypt,string publicKeyN) { AsymmetricKeyAlgorithmProvider provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); CryptographicKey standardKeyPair = provider.CreateKeyPair(1024); byte[] standardKey = standardKeyPair.ExportPublicKey(CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey).ToArray(); var data_n = CryptographicBuffer.DecodeFromBase64String(publicKeyN).ToArray(); Array.Copy(data_n,standardKey,7,data_n.Length); var key = provider.ImportPublicKey(standardKey.AsBuffer(),CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey); var result = CryptographicEngine.Encrypt(key,null); return result; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-server-2012-r2 – Windows Server 2012 R2 Essent
- 我需要仅使用本机Windows命令在批处理环境变量中匹配或替换
- 窗口 – 如何保护软件免受系统日期更改?
- windows-update – 域中的非MS程序更新
- Windows命令“date%s”的等价物是什么
- windows-phone-7 – 无法在Expression Blend中拖放行为
- windows-store-apps – UWP Apps的MessageDialog类是否支持
- windows – 将文件复制到不可执行的文件夹中?
- Breeze dos不会扩展多个导航属性路径?
- 批处理文件 – cmd / DOS批处理脚本中变量周围的方括号表示
推荐文章
站长推荐
热点阅读