在winrt c#中加密字符串并在c#.net中解密

在winrt c#中加密字符串并在c#.net中解密,c#,windows-runtime,encryption,encryption-asymmetric,C#,Windows Runtime,Encryption,Encryption Asymmetric,如何在C#中的WinRT Metro上使用非对称加密对字符串进行加密,并在经典Windows(比如在Web服务中)中对其进行解密 我想使用RsaPkcs1算法,我可以看到CryptographicKeyclass和rsapParametersclass甚至不兼容 如何实现这一点?我找到了一个解决方案,可以用.net 4可以成功使用的格式从加密密钥导出密钥。 加密密钥有2个功能1导出和2导出公钥。我使用了导出私钥的第一个函数。此函数有两个参数:第一个是导出类型,第二个是将填充的字节[] 如果使用了

如何在C#中的WinRT Metro上使用非对称加密对字符串进行加密,并在经典Windows(比如在Web服务中)中对其进行解密

我想使用RsaPkcs1算法,我可以看到
CryptographicKey
class和
rsapParameters
class甚至不兼容


如何实现这一点?

我找到了一个解决方案,可以用.net 4可以成功使用的格式从
加密密钥导出密钥。

加密密钥
有2个功能1<代码>导出
和2<代码>导出公钥。我使用了导出私钥的第一个函数。此函数有两个参数:第一个是导出类型,第二个是将填充的字节[]

如果使用了
Cryptographics PrivateKeyBlobType.Capi1PrivateKey
,则
Export
将生成的blob与.net 4的
RSACryptServiceProvider
可以导入的WinCAPI兼容

商在最新的
encryptedBase64Str
现在包含Base64中的加密字符串。让我们假设
encryptedBase64Str=“bwiaaackaabsu0eyaaaaaaaaaqcfrmtqmu3t14zsum5…”

网络服务

decryptedString
现在包含WinRT拥有的解密字符串。

我找到了如何以.net 4可以成功使用的格式从
CryptographicKey
导出密钥的解决方案。

加密密钥
有2个功能1<代码>导出和2<代码>导出公钥。我使用了导出私钥的第一个函数。此函数有两个参数:第一个是导出类型,第二个是将填充的字节[]

如果使用了
Cryptographics PrivateKeyBlobType.Capi1PrivateKey
,则
Export
将生成的blob与.net 4的
RSACryptServiceProvider
可以导入的WinCAPI兼容

商在最新的
encryptedBase64Str
现在包含Base64中的加密字符串。让我们假设
encryptedBase64Str=“bwiaaackaabsu0eyaaaaaaaaaqcfrmtqmu3t14zsum5…”

网络服务

decryptedString
现在包含WinRT拥有的解密字符串。

您必须使用公钥来解密内容。
不要忘记在WinRt版本中导出公钥

必须使用公钥来解密内容。
不要忘记在WinRt版本中导出公钥

顺便说一句,我并不是说以这种方式导出密钥是安全的,而是说明了如何在winrt和.net之间导出导入密钥。顺便说一句,我不是说以这种方式导出密钥是安全的,而是说明了如何在winrt和.net之间导出导入密钥
String str = "String To Encrypt";
IBuffer buf = CryptographicBuffer.ConvertStringToBinary(str,BinaryStringEncoding.Utf16BE);
String AsymmetricAlgName = Windows.Security.Cryptography.Core.AsymmetricAlgorithmNames.RsaPkcs1;
AsymmetricKeyAlgorithmProvider asym = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgName);
CryptographicKey key = asym.CreateKeyPair(512);
IBuffer enc = CryptographicEngine.Encrypt(key, buf, null);
byte[] encryptedbyteArr;
CryptographicBuffer.CopyToByteArray(enc, out encryptedbyteArr);
String encryptedBase64Str = Convert.ToBase64String(encryptedbyteArr);


//Export the private Key in WinCapi format

byte[] privatekeyBytes;
CryptographicBuffer.CopyToByteArray(key.Export(CryptographicPrivateKeyBlobType.Capi1PrivateKey), out privatekeyBytes);
String privatekeyBase64 = Convert.ToBase64String(privatekeyBytes);
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
String privateKey64 = "BwIAAACkAABSU0EyAAIAAAEAAQCFrMTqMU3T14zSUM5...";
String EncryptedString = "PbauDOjqMLD2P6WSmEw==";
byte[] EncryptedDataBlob = Convert.FromBase64String(EncryptedString);
byte[] privateKeyBlob = Convert.FromBase64String(privateKey64);
byte[] decryptedBytes;
rsa.ImportCspBlob(privateKeyBlob);
decryptedBytes = rsa.Decrypt(EncryptedDataBlob, false);
String decryptedString =System.Text.Encoding.BigEndianUnicode.GetString(decryptedBytes);