2016-03-30 13 views
2

ASCII değerinin exponent ve modül ile hesaplanması ile ilgili bir problemim var. RSA algoritması ile "K" nin ASCII değerini hesaplamak istiyorum. ASCII değeriBir ASCII karakterini C# ders kitabı RSA ile nasıl şifreleyebilirsiniz?

K C# kaynak koduna nasıl Sonra 75

c = m^e mod n 
    = 75^41 mod 689 
    = 316 

mı? "Implicity convert type" hatası aldım.

bu benim kaynak kodu

int n = 689; 
int e = 41; 
int d = 137; 
string value = "K"; 

for (int i = 0; i < value.Length; i++) 
{ 
    int c = (int)i; 
    c = Math.Pow(i,e); 
} 
Console.ReadLine(); 
+0

emin değil sizin hatayla ilgili eğer sadece kalanını her zaman ayırdığınız, bir döngü içinde çarpma yapmak böylece A*B mod N, (A mod N) * (B mod N) mod N eşdeğerdir ama kodunuzda bir hata var gibi görünüyor, for döngüsünün iç kısmı 'i' yerine 'yerine [i]' üzerinde çalışmalıdır. – jojonas

cevap

1
string value = "K"; 

// Convert the string into a byte[]. 
byte[] asciiBytes = Encoding.ASCII.GetBytes(value); 

Eğer dizi dışarı bir değişkene olarak ayarlayın ve yapmanız gereken ne olursa olsun matematik yapabilirsiniz koymak olsun.

+0

Bu yöntemi kullanıyorum ama math.pow() ile çalıştırdığımda, bu bir hata yapar, – Indra776

+0

Math.pow çıkışı bir int değil, iki katıdır. onu bir int ya da değişkeninizi iki katına çıkarın. Ayrıca iç parametrelerin de iki katına çıkması gerektiğine inanıyorum. – sjr59

0

Math.Pow çıktısı iki katıdır ve iki kayanı argüman olarak alır. En azından, bu nedenle gibi bir int olmak Math.Pow(i,e) çıktısını dökme:

c = (int)Math.Pow(i,e) 

Bu imo, C# hakkında kötü şeylerden biridir. Tam olarak neden tamsayı katlanmayı desteklemediğinden emin değil.

Ne tür i nedir? İki katına da dökülmesi gerekebilir.

+1

'75^41 ',' int 'olarak yayınlanırsa taşacaktır. –

3

75^41, int'a aktarılırsa taşacaksa, biraz matematik numarası yapmanız gerekir.

public static int PowModN(int a, int b, int n) 
{ 
    a = a % n; 
    int c = 1; 
    for(int i=1; i <= b; i++) 
     c = (c*a % n); 

    return c; 
} 

ve diğer işlemler için döngü değiştirmek:

for (int i = 0; i < value.Length; i++) 
{ 
    int c = (int)i; 
    c = PowModN(i,e,n); 
} 
+0

Metodu kullanıyorum ama sonuç hala hata, hata mesajı "Hata Statik olmayan alan, yöntem veya özellik için bir nesne başvurusu gereklidir. ConsoleApplication1.Program.PowModN (int, int, int) '' – Indra776

+0

Eğer kodunuzun tamamı 'statik Ana' ise, 'PowModN' statik 'yapabilirsiniz. Cevabımı buna göre güncelledim. –

+0

@JamesKPolk Harika yakaladın James. Sabit. –

İlgili konular