gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:22:23 26 4
gpt4 key购买 nike

如何在 C# 中的 WinRT Metro 上使用非对称加密来加密字符串并在经典 Windows 中解密它,比方说在网络服务中?

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

这是如何实现的?

最佳答案

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

CryptographicKey 有 2 个函数 1. Export 和 2. ExportPublicKey。我使用了导出私钥的第一个函数。这个函数有 2 个参数,第一个是导出的类型,第二个是将要填充的 byte[]。

如果使用CryptographicPrivateKeyBlobType.Capi1PrivateKeyExport生成的blob与.net 4的RSACryptoServiceProvider可以导入的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);

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 拥有的解密字符串。

关于c# - 在 winrt c# 中加密字符串并在 c# .net 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11281350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com