2016-04-06 16 views
1

Windows.Security.Cryptography.CoreをUWPで使用しようとすると、公開鍵をAsymmetricKeyAlgorithmProviderからインポートするときにエラーが発生します。私はすべての組み合わせを成功させることなく試しました。私は常にUTF8モードになるように入力文字列をチェックしました。UWP [ユニバーサルWindowsプラットフォーム] RSA AsymmetricKeyAlgorithmProviderインポート公開鍵

try { 
    var bytes = Encoding.UTF8.GetBytes(publicKeyString); 
    publicKeyString = Encoding.UTF8.GetString(bytes); 

    Debug.WriteLine(publicKeyString); 
    IBuffer keyBuffer = CryptographicBuffer.DecodeFromBase64String(publicKeyString); 

    byte[] bytes = Convert.FromBase64String(publicKeyString); 
    string hex = "2D2D2D2D2D424547494E205055424C4943204B45592D2D2D2D2D0A4D494942496A414E42676B71686B6947397730424151454641414F43415138414D49494243674B434151454172336767514744726E5645562B786A4F484F2B390A4B72595541547166756935666F364D65736E53466C6B797937482F4775327135667273724B305246383933507A584F664371414A6753534D58673330793463720A594E3742617838467979314C58744E2B5A35576B43436D644F597438704F636D7A75494D6A636E4E733063486B767859576B336658516D513255535A685063700A51595761382F4469392B344462745464587A643263346F717A4E4A4A4A4B66437A647731796E72776F4A755A4245563547747363396F48782F6D7231725434420A386F377635473553706D543368687661396762617034436C4231745677434B584F41636A2F71782F49416A505A35566E4B7A363669325534706A6F43764A79590A564E53497A3557346276726A6E622B76775848626B506D62316E6655503864526D33683767644F314D7330766B72715A4567714746416953343475686974576B0A65514944415141420A2D2D2D2D2D454E44205055424C4943204B45592D2D2D2D2D0A"; 

    Debug.WriteLine(hex); 
    AsymmetricKeyAlgorithmProvider provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); 
    CryptographicKey publicKey = provider.ImportPublicKey(CryptographicBuffer.DecodeFromHexString(hex), CryptographicPublicKeyBlobType.BCryptPublicKey); 
    IBuffer dataBuffer = CryptographicBuffer.CreateFromByteArray(Encoding.UTF8.GetBytes(plainText)); 
    var encryptedData = CryptographicEngine.Encrypt(publicKey, dataBuffer, null); 

    return CryptographicBuffer.EncodeToBase64String(encryptedData); 
} 
catch (Exception e) 
{ 
    throw; 
    return "Error in Encryption:With RSA ";   
} 
+0

'hex 'の復号化されたテキストは' X.509'形式の公開鍵です。 'X509SubjectPublicKeyInfo'を2番目の引数として渡すことができますが、これらの関数がバイナリ形式かテキスト形式かどうかはわかりません。 –

+0

私はhexとbase64stringのいずれかのエンコーディングを試みましたが、両方ともX.509とX.509で失敗します。私はANS1エラーを取得、私はまた、BcryptPublicKeyでPkcs1RsaPublicKeyを使用している間、このエラーを取得すべてが大丈夫ですが、私は例外0x0900001何かを取得し、それはちょうど任意の考えに失敗しますか? –

答えて

0

は、私は私の問題への解決策は、問題は、私はインポートしようとした公開鍵がASN1形式ではないということだったので、UWP暗号コアは新しいのASN1するDERからの変換を行うことができなかった発見しましたコードは:

byte[] bytes = Encoding.UTF8.GetBytes(publicKeyString);    

IBuffer keyBuffer = CryptographicBuffer.DecodeFromBase64String(publicKeyString); 

AsymmetricKeyAlgorithmProvider provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); 

CryptographicKey publicKey = provider.ImportPublicKey(keyBuffer,CryptographicPublicKeyBlobType.Pkcs1RsaPublicKey);` 
0

私は同じ問題を抱えています:ASN1不良タグ値があります。 ImportKeyPair(IBuffer)が自分の状況に合っていることがわかりました。 サンプルコード:

var loginPBK = "";//your public key,such as "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCp0wHYbg......." 
var provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithmNames.RsaPkcs1); 
var publicKey = provider.ImportPublicKey(CryptographicBuffer.DecodeFromBase64String(loginPBK)); 
var encryptData = CryptographicEngine.Encrypt(publicKey, CryptographicBuffer.ConvertStringToBinary(password, BinaryStringEncoding.Utf8), null); 
var pwd2 = CryptographicBuffer.EncodeToBase64String(encryptData); 
関連する問題