2016-04-06 16 views
1

UWP'de Windows.Security.Cryptography.Core kullanmayı denediğimde, genel anahtarı AsymmetricKeyAlgorithmProvider'dan almayla ilgili bir hata alıyorum. Her birleşimi başarıya ulaşmadan denedim. Giriş dizgisini her zaman UTF8 modunda olmasını kontrol ettim.UWP [Evrensel pencere platformu] RSA AsimetrikKeyAlgorithmProvider alma genel anahtarı

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' 'de deşifre metni' X.509' biçiminde bir kamu anahtarıdır. X509SubjectPublicKeyInfo'yu ikinci parametre olarak geçmeyi deneyebilirsiniz, ancak bu işlevlerin ikili veya metin biçiminden beklediğinden emin değilim. –

+0

Ben hex ve base64string kodlama denedim ve her ikisi de X.509 ve üzerinde başarısız olur. ANS1 hatası alıyorum, aynı zamanda BcryptPublicKey ile Pkcs1RsaPublicKey kullanırken bu hatayı aldım her şey yolunda ama ben bir istisna 0x0900001 böyle bir şey olsun ve sadece herhangi bir düşünce başarısız olur? –

cevap

0

benim soruna bir çözüm problemi i ithalat çalışıyordu genel anahtar ASN1 formda değildi ve bu nedenle UWP Kriptografi Çekirdek yeni ASN1 için DER dönüşümü yapamadı bulduk Kod:

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

Aynı sorunla karşılaşıyorum: ASN1 hatalı etiket değeri karşılandı. ImportKeyPair (IBuffer) durumumun doğru olduğunu buldum. Örnek Kod:

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