如何在 C# 中的 WinRT Metro 上使用非对称加密来加密字符串并在经典 Windows 中解密,比如在 web 服务中?
我想使用 RsaPkcs1 算法,我可以看到CryptographicKey
类和RSAParameters
类甚至不兼容。
这怎么可能实现?
如何在 C# 中的 WinRT Metro 上使用非对称加密来加密字符串并在经典 Windows 中解密,比如在 web 服务中?
我想使用 RsaPkcs1 算法,我可以看到CryptographicKey
类和RSAParameters
类甚至不兼容。
这怎么可能实现?
我找到了有关如何以CryptographicKey
.net 4 可以成功使用的格式导出密钥的解决方案。
CryptographicKey
有2个功能1.Export
和2 ExportPublicKey
.. 我使用了导出私钥的第一个函数。此函数有 2 个参数,第一个是导出类型,第二个是要填充的 byte[]。
如果CryptographicPrivateKeyBlobType.Capi1PrivateKey
使用,将产生的blob与.net 4可以导入Export
的WinCAPI兼容。RSACryptoServiceProvider
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);
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);
decryptedString
现在包含 WinRT 拥有的解密字符串。
您必须使用公钥来描述内容。不要忘记在 WinRt 版本中导出公钥!