C# Ve RSA (Sorun)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    overbite
    overbite's avatar
    Kayıt Tarihi: 13/Ağustos/2011
    Erkek

    aşağıdaki gibi bir class oluşturdum fakat bu class ile şifreleme yaparken her seferinde (aynı metin) şifrelenen data farklı çıkıyor ve şifrelenen veriyi aynen çözmeye çalışınca program hata veriyor. c# ile yeni yeni tanışıyorum işin içinden çıkamadım.

    örneğin;

    RSAsinifi rsa = new RSAsinifi();

    string x = rsa.Sifrele("asd");

    burada x'i textbox'a aktardığımda gördüğüm şey:

    �v��!��䟠�ӝ�D����cL�U��j�������5���EV���€JA�[�� 7.��y3?�s    �7�>��;�L:�y�����k��^I��ڌH„���1/������Hf�
    ]�T�

     

    yazdığım sınıf:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Security.Cryptography;
    
    namespace RSAcom
    {
        class RSAsinifi
        {
            RSACryptoServiceProvider RSAx = new RSACryptoServiceProvider();
            UTF8Encoding encoder = new UTF8Encoding();
    
            public string Sifrele(string metin)
            {
                byte[] x;
                x = encoder.GetBytes(metin);
                x = RSAx.Encrypt(x, false);
                metin = encoder.GetString(x);
                return metin;
            }
    
            public string Coz(string metin)
            {
                byte[] x;
                x = encoder.GetBytes(metin);
                x = RSAx.Decrypt(x, false);
                metin = encoder.GetString(x);
                return metin;
            }
        }
    }

    ulan bir susar mısın?
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wert
    wert's avatar
    Kayıt Tarihi: 19/Eylül/2005
    Erkek

    hacı stringe çevirmeden eklesene text boxa

     

    demek istediğim 

    123 432 567 423 532

    şeklinde eklettir


    |sadece aptalların başarısı ders notu ile ölçülür|
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    hocam fonksiynlarındaki

    encoder.GetString yerine Convert.ToBase64String,  encoder.GetBytes yerine Convert.FromBase64String kullanırsan sorun çözülür ;)

    pardon  birden fazla varmış. şu şekilde düzenle..

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Security.Cryptography;
    
    namespace RSAcom
    {
        class RSAsinifi
        {
            RSACryptoServiceProvider RSAx = new RSACryptoServiceProvider();
            UTF8Encoding encoder = new UTF8Encoding();
    
            public string Sifrele(string metin)
            {
                byte[] x;
                x = encoder.GetBytes(metin);
                x = RSAx.Encrypt(x, false);
                metin =  Convert.ToBase64String(x);
                return metin;
            }
    
            public string Coz(string metin)
            {
                byte[] x;
                x = Convert.FromBase64String(metin);
                x = RSAx.Decrypt(x, false);
                metin = encoder.GetString(x);
                return metin;
            }
        }
    }


    unbalanced tarafından 10/Kas/12 00:59 tarihinde düzenlenmiştir

    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    overbite
    overbite's avatar
    Kayıt Tarihi: 13/Ağustos/2011
    Erkek

    @wert text box'a stringe çevirmeden koyamıyorum ki

    @unbalanced hocam senin dediğin gibi yapmaya çalıştım şu şekilde

    public string Sifrele(string metin)
            {
                byte[] x;
                x = Convert.FromBase64String(metin);
                x = RSAx.Encrypt(x, false);
                metin = Convert.ToBase64String(x);
                return metin;
            }

    bu seferde aşağıdaki hatayı verdi:

    Invalid length for a Base-64 char array.


    ulan bir susar mısın?
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SpArK
    SpArK's avatar
    Kayıt Tarihi: 17/Temmuz/2005
    Erkek

    x i aldiktan sonra, koyacagin yere x.ToString("X2"); yaparak koy bakalim, belki daha anlasilir olur sifrelenmis metin gosterim acisindan.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    overbite bunu yazdı

    @wert text box'a stringe çevirmeden koyamıyorum ki

    @unbalanced hocam senin dediğin gibi yapmaya çalıştım şu şekilde

    public string Sifrele(string metin)
            {
                byte[] x;
                x = Convert.FromBase64String(metin);
                x = RSAx.Encrypt(x, false);
                metin = Convert.ToBase64String(x);
                return metin;
            }

    bu seferde aşağıdaki hatayı verdi:

    Invalid length for a Base-64 char array.

     

    düzelttim hocam, iki fonksiynda da ikişer tane varmış. herbirinden bi tanesini değiştirecektin


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    overbite
    overbite's avatar
    Kayıt Tarihi: 13/Ağustos/2011
    Erkek

    @unbalanced hocam sağolasın düzeldi, fakat bir noktayı anlamadım. "deneme" yazıp şifrelediğimde her seferinde şifreli metin değişik çıkıyor, anahtarlar değişmediği sürece şifreli metinin de aynı olması gerekmez mi?


    ulan bir susar mısın?
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    muhtemelen şifrelenmiş bilginin içinde zamana göre oluşturulmuş dinamik şeyler var, çok bilgim yok şifreleme algritmaları hakkında. ama mesela şifrelenmiş bilgiye zaman bilgisini ekleyip vermiş olabilirler ve o zaman bilgisini okuyup onu anahtar olarak kullanıyor olabilirler, böyle bir mantık getirebildim. belki yanlıştır..

    encription metodunun aslı burada

     

    public byte[] Encrypt (byte[] rgb, bool fOAEP) 
    {
        // choose between OAEP or PKCS#1 v.1.5 padding
        AsymmetricKeyExchangeFormatter fmt = null;
        if (fOAEP)
            fmt = new RSAOAEPKeyExchangeFormatter (rsa);
        else
            fmt = new RSAPKCS1KeyExchangeFormatter (rsa);
    
        return fmt.CreateKeyExchange (rgb);
    }

     

    tüm algoritma için buraya bakabilirsin.  http://www.di-mgt.com.au/rsa_alg.html 

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 1232 Toplam Mesaj: 8