C# の WinRT Metro で非対称暗号化を使用して文字列を暗号化し、従来の Windows でこれを復号化するにはどうすればよいでしょうか。
RsaPkcs1 アルゴリズムを使用したいのですが、CryptographicKey
クラスとRSAParameters
クラスの互換性がほとんどないことがわかります。
これはどのように達成できますか?
C# の WinRT Metro で非対称暗号化を使用して文字列を暗号化し、従来の Windows でこれを復号化するにはどうすればよいでしょうか。
RsaPkcs1 アルゴリズムを使用したいのですが、CryptographicKey
クラスとRSAParameters
クラスの互換性がほとんどないことがわかります。
これはどのように達成できますか?
CryptographicKey
からキーを .net 4 が正常に使用できる形式でエクスポートする方法に関する解決策を見つけました。
CryptographicKey
1.Export
と 2. の2 つの機能がありますExportPublicKey
。秘密鍵をエクスポートする最初の関数を使用しました。この関数には 2 つのパラメータがあります。1 番目はエクスポートのタイプで、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版で公開鍵のエクスポートを忘れずに!