RSACryptoServiceProvider тұтастығын шығармайды

RSA арқылы кейбір мәтінді шифрлауым керек, содан кейін құпия кілт арқылы оны қалпына келтіру керек. Мәселе мынада: RSACryptoServiceProvider.Encrypt() сол кілтті пайдаланғанда да әр түрлі мәнді әр уақытта шығарады. Міне, LINQpad-ке тестілеу үшін енгізген код:

CspParameters cp = new CspParameters();
cp.KeyContainerName = "MyKey";
cp.Flags = CspProviderFlags.UseMachineKeyStore | CspProviderFlags.UseExistingKey;

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);

// using LINQpad to verify the key is loaded properly -- same every time
rsa.ToXmlString(true).Dump();

byte[] rgb = new ASCIIEncoding().GetBytes("Hello world");
byte[] xx = rsa.Encrypt(rgb, false);
string b64 = Convert.ToBase64String(xx);

// this changes every time:
b64.Dump();

Мен сыныптың басқа бір нәрсені, сонымен қатар нәтижеге әсер ету кілтін қолдануы керек деп ойлаймын, бірақ мен нені анықтауға тырысамын.

3
Деректерді шифрлегенде, сіз әрқашан бірдей нәтиже аласыз ба?
қосылды автор robert, көзі
Мен ойлаған жоқпын деп ойладым. Сол себепті мен оны шифрланған мәтінге қарап, бәрі бірдей екенін көрдім. Бірақ менің жауапымды жаңартуға барар алдында мәселені қайта-қайта айта алмадым - Мен Encrypt() екінші парамында толтырғыштың түрлерін араластырдым деп ойлаймын.
қосылды автор gordonmleigh, көзі

2 жауаптар

Түрлі шығыс қалыпты қалыпты. Бұл сіздің деректеріңіз PKCS # 1 немесе OAEP арқылы толтырылуына байланысты және екеуі де кейбір кездейсоқ деректерді қолданып/қосып жатыр.

Енді RSA-ды қалай пайдалану керек. Көптеген себептер, бірақ сіз үшін тікелей, сіз үшін, бұл толтырғыш/блоктың өлшемі шифрлауға болатын байттар санын шектейді (және RSA шифрлау блоктарын айналдыруға тым баяу).

Симметрияны қалай жақсартуға болатынын сипаттайтын тақырып бойынша блог жазбасын жаздым (жақсы жылдамдық, өлшем мөлшері жоқ) асимметриялы шифрлаумен - екі әлемнің ең жақсысын алу :-)

1
қосылды

Шифр мәтіні бірдей ашық мәтінді шифрланған сайын әр түрлі болғандықтан, ол шифрланбайды. Бұл шын мәнінде жақсы шифрлау алгоритмінің белгісі, ол бұл әрекетті әртүрлі шабуылдарға төзімді етеді.

Себебі, шифрлау логикасы үдерісте кездейсоқтықты енгізеді, мысалы жүйелі түрде кездейсоқ байттарды өздігінен мәтіннің алдында қосады. Шифрлау логикасы барлық шифрлер мәтіні шифрдан кейін осы байттарды елемеуді білсе, онда ол бастапқы мәтінді қайта шығара алады.

Бұл b64 мәтінінің кез келген данасын қабылдауға, оны кері үрдіске жіберуге және өндірілген «rgb» барлық жағдайларда «Сәлем әлем» екенін көруге кеңес беремін.

1
қосылды