2011-07-06 25 views
8

Bir çift anahtar üretmek istiyorum ve şöyle bir şey yazalım:NET'te basit rsa şifreleme/şifre çözme?

Rsa.Decrypt(data, privateKey); 
Rsa.Encrypt(data, publicKey); 

Bunu yapmanın kolay bir yolu var mı? RsaCryptoServiceProvider gibi bir şey olduğunu biliyorum ama uygun nesne oluşturmak için XML'e ihtiyacı var. Özel/public anahtarını web.config içine koyacağım basit bir dize (xml değil) olarak kaydetmek istiyorum:

<appSettings> 
    <add key="MyPublicKey" value"...."/> 
    <add key="MyrivateKey" value"...."/> 
</appSettings> 

Ve daha sonra web.config'i şifreleyeceğim ve böylece her şey güvenli olacak (IIS bununla ilgilenecektir). Bunu bu şekilde yapmak mümkün mü?

+0

İsteğe bağlı verileri RSA ile şifrelemeyin. RSA * çok * kırılgandır ve doğru dolgu ile doğru şekilde kullanılmalıdır. Rasgele verilerin şifrelenmesi için RSA ve blok cypher kombinasyonu kullanmalısınız. – CodesInChaos

+1

Akla ilk gelen iki soru: Öncelikle, kamu anahtarını mesaj alıcısına güvenli bir şekilde nasıl iletmeyi planlıyorsunuz? Unutmayın, ortak anahtar şifresi yalnızca temel yönetim sistemi kadar güvenlidir. İkincisi, * private * anahtarını web.config gibi iyi bilinen bir dosyaya koymanız size deli gibi tehlikeli değil mi? Özel anahtarımı yalnızca web.config içine sığdırmak için değil, hassas veri depolaması için özel olarak tasarlanmış bir sistemde saklıyorum. –

+3

@CodeInChaos: Başka bir deyişle, Şifreleme İletisi Sözdizimi veya PGP gibi iyi bilinen bir standart kullanın (.net ile CMS, muhtemelen daha iyi desteklenir). @Eric: özel anahtarla ilgili olarak, web.config iyi bir şekilde güvenlik altına alınmışsa (ve çoğu istemcinin buna erişmemesi gerektiğini varsayalım), orası herhangi bir yer kadar iyi bir yer. Güvenli bir yerde saklarsanız, kopyalamaya karşı korunabilirsiniz, ancak yine de otomatik bir sistemden erişmeniz gerekir, bu yüzden erişim anahtarını/şifresini nerede saklıyorsunuz? (Çok güvenli sistemler için bir HSM veya TPM kullanabilirsiniz). –

cevap

10

(... 512/1024/2048) Tercih tuşları boyutuyla bir RSACryptoServiceProvider nesne oluşturun Örneğin bayt dizisinde, genel anahtar kullanımının Modül kısmını elde etmek için gerekenler:

ExportParameters'da gerçek bir değeri geçtim çünkü özel anahtar parametrelerine erişmek istediniz.

ve sonra sadece dizeye bayt dizisi dönüştürmek gerekir:

Daha sonra
string publicModulusStr = Convert.ToBase64String(modulus); 

, sen web.config okuyup ve RSACryptoServiceProvider nesneyi yeniden bir RSAParameters oluşturmak istediğiniz metinle nesne Dosyada saklanır ve sonra RSAParameters RSACryptoServiceProvider yapıcısına iletir.

Ve sadece bir not: kaydettiğiniz web.config dosyası, özel anahtarlarınızı içeride sakladığınız için çok özel tutulmalıdır.