1

C# の WinRT Metro で非対称暗号化を使用して文字列を暗号化し、従来の Windows でこれを復号化するにはどうすればよいでしょうか。

RsaPkcs1 アルゴリズムを使用したいのですが、CryptographicKeyクラスとRSAParametersクラスの互換性がほとんどないことがわかります。

これはどのように達成できますか?

4

2 に答える 2

6

CryptographicKeyからキーを .net 4 が正常に使用できる形式でエクスポートする方法に関する解決策を見つけました。

CryptographicKey1.Export と 2. の2 つの機能がありますExportPublicKey。秘密鍵をエクスポートする最初の関数を使用しました。この関数には 2 つのパラメータがあります。1 番目はエクスポートのタイプで、2 番目は入力する byte[] です。

を使用するとCryptographicPrivateKeyBlobType.Capi1PrivateKey、生成される blob は、.net 4 がインポートできるExportWinCAPI と互換性があります。RSACryptoServiceProvider

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);

encryptedBase64StrBase64 で暗号化された文字列が含まれるようになりました。そして、それを言いましょう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);


decryptedStringWinRT が持っていた復号化された文字列が含まれるようになりました。

于 2012-07-04T19:06:41.440 に答える
0

コンテンツを解読するには、公開鍵を使用する必要があります。WinRt版で公開鍵のエクスポートを忘れずに!

于 2013-01-10T17:13:48.377 に答える