2012-12-06 73 views
7

Tôi khá mới đối với tất cả điều mã hóa này và tôi đang cố gắng làm một ứng dụng đơn giản để mã hóa một chuỗi đã cho. Đây là mã của tôi:Mã hóa với chứng chỉ

public static X509Certificate2 getPublicKey() 
{ 
    RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); 

    X509Certificate2 cert2 = new X509Certificate2("c:\\certificate.cer"); 

    return cert2; 
} 


public static string cipherRequest(byte[] stringToEncrypt) 
{ 
    X509Certificate2 certificate = getPublicKey(); 

    RSACryptoServiceProvider rsa = certificate.PublicKey.Key as RSACryptoServiceProvider; 

    byte[] cryptedData = rsa.Encrypt(stringToEncrypt, true); 

    return Convert.ToBase64String(cryptedData); 
} 

public static void Main() 
{ 

    try 
    { 

     ASCIIEncoding ByteConverter = new ASCIIEncoding(); 

     byte[] test = ByteConverter.GetBytes("stringtoencrypt"); 

     string first = cipherRequest(test); 
     string second= cipherRequest(test); 

     Console.WriteLine("first: {0}", first); 
     Console.WriteLine("second: {0}", second); 

    } 
    catch(CryptographicException e) 
    { 
     Console.WriteLine(e.Message); 
    } 

} 

Vì vậy, mỗi lần tôi gọi cipherRequest nó tạo ra các kết quả khác nhau. Tôi đã kiểm tra chứng chỉ được tải nhưng nó tạo ra các kết quả khác nhau.

Mọi suy nghĩ?

+3

Hành vi này là do thiết kế. Có một vấn đề thực tế? – SLaks

+1

Tại sao bạn có một chuỗi ký tự 'byte []'? – SLaks

Trả lời

7

Đệm ngẫu nhiên được thêm trước khi mã hóa thực tế để tránh các cuộc tấn công nhất định. Đây là lý do tại sao bạn nhận được kết quả khác nhau mỗi lần bạn gọi phương thức mã hóa.

Mọi chi tiết, xem bài này:

RSA in C# does not produce same encrypted string for specific keys?

+0

Cảm ơn, thông qua một số đọc thêm tôi đã quản lý để đạt được kết luận đó :) Của tôi xấu – antistes

Các vấn đề liên quan