Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > asp.net - kriptoloji - rsa algoritması
Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
20.07.2008-18:03 #49427
Merhaba arkadaşlar,

Rsa algoritmasında şifrelediğim veriyi stringe dönüştürüp daha sonra decriypt etmek istediğimde neden "hatalı veri" hatasını alıyorum, anlamıyorum. Yardımlarınızı bekliyorum.

Stringe dönüştürmeden byte tipindeki veriyi decrypt edebiliyorum.

Stringe dönüştürmek zorunda olmamın nedeni veriyi cookie'de saklıyor olmam.

Hepinize kolay gelsin.





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
21.07.2008-00:19 #49437
Okurken string dışında bir veri tipiyle okuyor olabilirmisin.





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
21.07.2008-09:28 #49441
Hayır, string dışında bir veri tipi ile okumuyorum.

UnicodeEncoding ByteConverter = new UnicodeEncoding();
ByteConverter.GetString(...) ya da ByteConverter.GetBytes(...).

String olarak cookieye atıp cookieden okuduktan sonra byte'a çevirip decrypt etmeye çalışıyorum.

Kriptoloji seçmeli dersini almadığıma pişman oldum şimdi ;)

Önce hash algoritmasını kullandım, geri dönüşü olmadığı için rsayı kullandım. Rsa'da önce 128 byte sorunu çıktı. Onu düzelttim. Şimdi de hatalı veri... :(





bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
timur


avatar
İstanbul
Kayıt: 19.01.2006
21.07.2008-09:33 #49442
string e çevirdiğiniz encoding ile okuduğunuz encoding farklı olabilir mi?

Bir de base64 string e çevirip o şekilde kaydetmeyi deneyin bence. Encoding ile uğraşmamış olursunuz...






Hayat varsa umut vard?r...
www.timureroglu.com

Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
22.07.2008-14:00 #49538
base64sting'e çevirince daha önce aldığım hatayı aldım.
(The data to be decrypted exceeds the maximum for this modulus of 128 bytes.Array cannot be null. Parameter name: bytes )

Ayrıca UTF8Encoding, ASCIIEncoding, UnicodeEncoding i denedim. Ama olmadı.

Yok mu bunun bir çaresi :(






bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
kellad


avatar
istanbul
Kayıt: 21.01.2006
22.07.2008-19:34 #49553
Kodlarını gönderirsen inceleyip hatasını bulabiliriz. Mümkünse tabi?





Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
23.07.2008-11:31 #49603
Tabii mümkün...

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
    //ASCIIEncoding ByteConverter = new ASCIIEncoding(); //128 byte hatası devam ediyor. Array can not be null.
    //UnicodeEncoding ByteConverter = new UnicodeEncoding(); //128 byte hatası devam ediyor. Array can not be null.
    UTF8Encoding ByteConverter = new UTF8Encoding(); //128 byte hatası devam ediyor. Array can not be null.
    byte[] dataToEncrypt;
    byte[] dataToDecrypt;
    byte[] encryptedData;
    byte[] decryptedData;


    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            dataToEncrypt = ByteConverter.GetBytes("ofof");
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
            encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(true), false);
            Label1.Text = ByteConverter.GetString(encryptedData);

            dataToDecrypt = encryptedData;
            decryptedData = RSADecrypt(dataToDecrypt, RSA.ExportParameters(true), false);
            if(decryptedData != null)
                Label2.Text = ByteConverter.GetString(decryptedData);

            Label2.Text += "<br/>";
            dataToDecrypt = ByteConverter.GetBytes(Label1.Text.Trim());
            decryptedData = RSADecrypt(dataToDecrypt, RSA.ExportParameters(true), false);
           //decryptedData hata oluşnca null geliyor.
            if(decryptedData != null)
                Label2.Text += ByteConverter.GetString(decryptedData);

            HttpCookie hc = new HttpCookie("Temp");
            hc.Values.Add("TempPassword", ByteConverter.GetString(encryptedData));
            hc.Expires = DateTime.Now.AddDays(30); //cookie 30 gün
            Response.Cookies.Add(hc);
        }
    }

    static public byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
    {
        try
        {
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
            RSA.ImportParameters(RSAKeyInfo);
            return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
        }
        catch (CryptographicException ex)
        {
            HttpContext.Current.Response.Write(ex.Message + "<br/>");
            return null;
        }
    }

    static public byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
    {
        try
        {
            RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
            RSA.ImportParameters(RSAKeyInfo);
            return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
        }
        catch (CryptographicException ex)
        {
            HttpContext.Current.Response.Write(ex.Message + "<br/>");
            return null;
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
        HttpCookie hc = Request.Cookies["Temp"];
        dataToDecrypt = ByteConverter.GetBytes(hc.Values["TempPassword"]);
        //string a = ByteConverter.GetString(dataToDecrypt);
        Response.Write(dataToDecrypt.Length);
        dataToDecrypt = ByteConverter.GetBytes(hc.Values["TempPassword"]);

        decryptedData = RSADecrypt(dataToDecrypt, RSA.ExportParameters(false), false);
        try
        {
            Label2.Text = ByteConverter.GetString(decryptedData);
        }
        catch (CryptographicException ex)
        {
            Response.Write(ex.Message + "<br/>");
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message + "<br/>");
        }
    }

   
}







bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Yazar
dotnetonur


avatar
Dersaadet
Kayıt: 21.11.2007
23.07.2008-16:46 #49641
http://www.ideefixe.com/Kitap/tanim.asp?sid=MHKR21TBX7NRAJ0QQG60

Microsoft .NET ve Güvenlik kitabı.. özellikle kriptoloji konusundaki bölüm güzel, tavsiye ederim...





Ortam sanal olsa da, islenen suc gercektir...

Yazar
sevecen


avatar
adana istanbul
Kayıt: 08.02.2006
23.07.2008-16:58 #49642
Teşekkür ederim dotnetonur.

Arkadaşlar bu arada problem çözüldü. timur arkadaşımıza teşekkür ediyorum.

Şu satırlarda değişiklik var:

Label1.Text = ByteConverter.GetString(encryptedData);
Label2.Text = Convert.ToBase64String(decryptedData);

dataToDecrypt = ByteConverter.GetBytes(hc.Values["TempPassword"]);
dataToDecrypt = Convert.FromBase64String(hc.Values["TempPassword"]);








bize ruyalarimizin degil uyanikligimizin tabiri gerek (Alinti)





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb