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

Pan*_*fas 1 c# encryption encryption-asymmetric windows-runtime

如何使用C#中的WinRT Metro使用非对称加密对字符串进行加密,并在经典Windows中解密,让我们说在Web服务中?

我想使用RsaPkcs1算法,我可以看到CryptographicKey类和RSAParameters类甚至不兼容.

如何实现这一目标?

Pan*_*fas 6

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

CryptographicKey有2个功能1. Export 和2 ExportPublicKey.我使用了导出私钥的第一个函数.该函数有2个参数,第1个是导出类型,第2个是将填充的字节[].

如果CryptographicPrivateKeyBlobType.Capi1PrivateKey使用,Export将生成的blob 与RSACryptoServiceProvider.net 4可以导入的WinCAPI兼容.

WinRT的

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);
Run Code Online (Sandbox Code Playgroud)

encryptedBase64Str现在包含Base64中的加密字符串.让我们说encryptedBase64Str="BwIAAACkAABSU0EyAAIAAAEAAQCFrMTqMU3T14zSUM5..."

网络服务

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);
Run Code Online (Sandbox Code Playgroud)


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